/// <summary> /// WebSocket接続を現在の設定から接続する。 /// </summary> /// <returns>処理状態。</returns> private IObservable <Unit> Reconnect() { return(Observable.Defer(() => { try { // 既に接続済みの場合は一旦終了する this.Close(); // 接続を確立し、リクエスト受け取り用の処理を登録 var conn = new WebSocketRpcConnection(this.url); conn.Connect(); conn.RequestHandler = this.Receive; // 自動的にログインAPIも呼ぶ return conn.Call("login", new Dictionary <string, object>() { { "id", this.playerId }, { "token", this.token }, }).Select(_ => { // 確立したコネクションを保存 // TODO: OnCloseイベントなどに、コネクションエラー時の再接続を登録する this.conn = conn; return Unit.Default; }); } catch (Exception e) { return Observable.Throw <Unit>(e); } })); }