読者です 読者をやめる 読者になる 読者になる

プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

イベントをObservableにしたソケットラッパーをNugetで公開しました

ソケットのイベントをObservableにしただけ的な俺得ライブラリをNugetに上げることができました

名前はRxSocketで完全に名前負けしてます

期待した人ごめんなさい

名前はどうしたらよかったんですかねぇ

www.nuget.org

RxSocketって名前は既に使われていたみたい(検索結果に出てこないけど)なので、Punio.RxSocketです

ほんと名前・・

ソースはこちら

github.com

使い方

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にはテスト用アプリも入っているのでそちらもみてみてみてください。

イベントをObservableにしたソケットラッパーを作りました

似たようなのはたくさんありそうな気がしますが、(自分の)使い勝手がいいものがなかなか見つからずいつも似たようなコードを書いていたのでライブラリ化しました

github.com

とりあえずTcpのServer/Clientができたので公開

いまだにIObservableとかちゃんと理解できてないので正しい書き方なのかどうかとか不安ですが、とりあえずアウトプットが大事ですよ、きっとそうですよ

あとは優しい詳しい人が何とかしてくれることを祈っておきます

残務

YouTubeのアカウントが停止されて復活した話

FF15をやるためにPS4 Proを買いました

去年の11月のことです

PS4を買ったらやりたかったのがゲーム動画のShare機能でプレイ動画がLive配信できるやつ

manuals.playstation.net

見てほしい人がいるわけでもなくとりあえず配信してました

www.youtube.com

クリア

FF15クリアしてエンディングまで配信したのがこれです

youtu.be

エンディングの一部はソフトから制限がかかって配信できないようになっています(ネタバレ対策というより曲の著作権っぽい制限?)

f:id:puni-o:20170201102129p:plain

ということでメーカー側が嫌がるようなことは何もせず(別途キャプチャソフトとか使って上記制限期間を配信したわけでもなく)ゲームはクリアしました

翌日

クリアしてもまだまだやっていない要素が残っているので、翌日も配信をしようとしたらエラーでできませんでした

その翌日にはGoogleから意味不明なメールがやってきました

f:id:puni-o:20170201102605p:plain

メールにあるようにアカウントにログインしたのでこの件はこれで終了したものだと思っていました

その後も何度やってもLive配信はできませんでした

翌年

年が明けても配信できないので少しググってみるとFF15配信者の垢BANとか出てきてました

ブラウザでYouTubeにログインしたところ私のアカウントも見事に凍結状態でした(普段YouTube使わないので・・)

この前のGoogleからのメールはこれだったんですね

このメールにあるお問い合わせページ

My account is disabled - Accounts Help

に「PS4でFF15配信してただけなのになぜ?」って日本語で書いて終了

もともと配信機能があるから配信してただけなのでそれ以来すっかり忘れてました

本日

Googleからメールがきてました

f:id:puni-o:20170201103318p:plain

アカウントが復活しました

なんだかなー