/// <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);
                }
            }));
        }