イベントをObservableにしたソケットラッパーをNugetで公開しました
ソケットのイベントをObservableにしただけ的な俺得ライブラリをNugetに上げることができました
名前はRxSocketで完全に名前負けしてます
期待した人ごめんなさい
名前はどうしたらよかったんですかねぇ
RxSocketって名前は既に使われていたみたい(検索結果に出てこないけど)なので、Punio.RxSocketです
ほんと名前・・
ソースはこちら
使い方
RxTcpClient
var client = new RxTcpClient(); // Subscribe client.Error.Subscribe(); client.Closed.Subscribe(); client.Received.Subscribe(); // Connect try{ client.Connect("127.0.0.1",10000); }catch(Excepction){}
TCPで接続するクライアントです
購読可能なイベントは、Error,Close,Receiveです
いつ来るのかはまぁ見た通りですね
接続は同期メソッドで失敗時は例外吐きます
今までの経験でいうとソケット通信のエラーの90%以上は接続で起きている気がします。 んで、エラー起きたときはまぁ少し待って再接続ですよね。 そういう感じの処理を書くときは同期呼び出しで失敗したらWinSockの例外拾うってのが私は使いやすいんで、こんな感じです。 (こういうところをちゃんと作れると少しは名前に追いつけそうですけどね)
IPv6やDSN名でもつながるはずです(DNSは試してないです)
RxTcpServer
var server = new RxTcpServer(); // Subscribe server.Error.Subscribe(); server.Accepted.Subscribe(); // client connected server.Closed.Subscribe(); // client closed server.Received.Subscribe(); // Listen try{ server.Listen(IPAddress.Any.ToString(),10000); }catch(Exception){}
TCPのサーバーです
クライアントの接続、切断イベントが購読できるところがサーバーソケットですね
こちらもListenは同期で失敗時に例外吐きます。「そのポート使われてるよ!」ってのが一番多い例外じゃないでしょうか。
こちらもListenに渡すアドレスでIPv4/6を判断するはずです
RxUdpListener
var listener = new RxUdpListener(); // Subscribe listener.Received.Subscribe(); // Listen try{ listener.Listen(10000); // UNICAST // or // listener.Listen("224.0.0.1",10000); // MULTICAST }catch(Exception){}
UDPのデータを受信する人です
Listenにアドレスを指定するとマルチキャストと判断してJOINします(マルチキャストのテストできる環境がないので実際に受信できるのか未確認)
こんな感じ
ソケット通信処理はつながったらあとは受信イベントを待つだけ、って感じなのが多いのでそれ用ですね。githubにはテスト用アプリも入っているのでそちらもみてみてみてください。