Closed velvelhype closed 1 year ago
Privmsg適当にやった
irssi --nick kamori1 irssi --nick kamori2 みたいな感じでクライアントを複窓開いて、相互通信ができるようにした
全体的にリファクタが必要になっている ・userデータの取り扱い方 ・コマンドのデータの取り扱い方 などが不細工だと感じる
やってないこととして ・やりとりはできるけど、前回のキャッシュが残っていて変な感じ
一応ここまでの機能を一区切りとして、 ・テストの開発 ・デバッグ ・リファクタ ・次に取り組むべきことをチームで共有する ことがしたい
これ動かなくね...?
レビュー遅れてすまん、確認した!
俺の環境は接続後すぐabortするからほぼ動作確認不能 一応少し確認できたのはあるから問題書く
仕様として正しいのか不明な部分
余談
色々調べてみてからもう一回報告しにきます。
std::vector<std::__cxx11::basic_string
dockerとかで適当に環境作る?
まだまだバグっているけども・・・ 一応一個なおした記念に まだout_of_rangeとか出るからそれに取り組んだり、あるいは権限周りやったりする予定
対応したつもり:
対応してない:
→ warning結構対応した(してもらった) 今unusedになってるのは、コマンド(cap, userとか)だけど、いずれ作り込んだら使うはずなので放置
だいぶエラーは減ってきている感じするので、軽く動作確認してくれると嬉しいっす user -> nick -> join -> privmsgの順番で、rfc通りの機能を持たせることを目標にやる デバッグ中にout of vectorでたらそれ対応する感じで進めていきます
しばらくチャンネル周りのコマンドからやっていくので、 commands/ServerQueriesAndCommandsあたりやってくれると嬉しいっす、サーバー周りは俺苦手だろうし
動作確認。
動作全然問題なさそう。めっちゃいいね! かなりIRCみ出てきてる。
自分の名前が*になってるのって多分仕様だよね?ちょっとわからんちゃわからん。
バグについて
PC: /ft_irc$ ./ft_irc
server start
new connection -> [4]
=MSG RECEIVED======
CAP LS
NICK test1
from :
===================
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 2) >= this->size() (which is 2)
Aborted (core dumped)
PC: /ft_irc$
14:57 -!- ___ _
14:57 -!- |_ _|_ _ _____(_)
14:57 -!- | || '_(_-<_-< |
14:57 -!- |___|_| /__/__/_|
14:57 -!- Irssi v1.2.2-1ubuntu1.1 - https://irssi.org
14:57 -!- Irssi: The following settings were initialized
14:57 real_name
14:57 -!- Irssi: Looking up localhost
14:57 -!- Irssi: Connecting to localhost [127.0.0.1] port 6667
14:57 -!- Irssi: Connection to localhost established
14:57 -!- Irssi: Connection lost to localhost
原因不明ゴミバグ wsl, irssi, vscodeのターミナルっていう環境で、接続順に関係なく接続できないことがある。受け取りがコマンドを受け取れてないから失敗してるっぽいけど意味が分からん。
動作テストサンキューー
→自分の名前が*になってるのって多分仕様だよね?ちょっとわからんちゃわからん。 そういや放置してた 複数クライアントで試すと一人目だけそうなるんだよなー nickやるときに調べるわ
→バグ報告りょ これ俺も稀によくあるわ nickとか、認証で起きてそう 調査する
→原因不明ゴミバグ サーバーが失敗したときに、クライアントに”失敗しました”って送ってないからかなと思っている これからserver側からのレスポンスを実装していくからその過程で治るといいなって感じ
あざす、最後の奴に関してはpollの俺が作った処理あたりが悪い可能性もありそうなんで少し調べてみる。
真ん中のabortだけなくなったらいったんマージできそうだね
そうね まずnick, userやるから、その過程で解消できたらいいな
これ同じような奴まだある。 接続だけしてほっとくと死ぬ
server start
new connection -> [4]
=MSG RECEIVED======
CAP LS
NICK test1
USER me me localhost :me
from :
===================
capUser done (done nothing actually)
=MSG RECEIVED======
MODE * +i
from : test1
===================
=MSG RECEIVED======
WHOIS test1
from : test1
===================
=MSG RECEIVED======
PING localhost
from : test1
===================
new connection -> [5]
=MSG RECEIVED======
CAP LS
NICK test1
from :
===================
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 2) >= this->size() (which is 2)
Aborted (core dumped)
二人だと死なないような気がする
問題点:無意識スネークケースが多すぎる 修正する
ーーーーーーーーーーーーーーーー 複数コマンドをできるように実装した、結構変更がデカくなった かなり影響が出た
commandから std::vector
コマンド実行部分をファイル分けしたり、 パースのやり方をクリーンなものにしたり、 cap lsのくそ気持ち悪い処理をクリーンにしたり
初期から気持ち悪かった commands->get_command みたいな命名を直して、
tryCommandsを tryCommands { for(コマンドの数だけ) tryCommand(cmd, user) } みたいにすることで、変数名が長くなるのをやめたり、見やすくしたりした
結構綺麗になったと思う
動作確認。 全然問題なさそう、何回か試したけど今のところクラッシュしてない。
動作自体も〇でいいんじゃないでしょうか
さんきゅーー とりあえずマージする
やったこと
デバッグは printDebugMsgRed printDebugMsgYellow みたいなのを作って色分けして出してみた
やってないこと
スネークケースの修正が中途半端かもしれない