Пример #1
0
        /// <summary>
        /// アラート情報の取得を開始します。
        /// </summary>
        protected void StartReceiveAlert()
        {
            lock (SyncRoot)
            {
                // アラート情報の受信を開始するためのメッセージです。
                var message = NicoString.MakeThreadStart(
                    this.alertInfo.MS.ThreadId, 1);

                var buffer = Encoding.UTF8.GetBytes(message);
                this.socket.Send(buffer);

                StartReceiveAlertLoop();
            }
        }
Пример #2
0
        /// <summary>
        /// サーバーのメッセージ処理を開始します。
        /// </summary>
        /// <remarks>
        /// これ以後、メッセージが受信されるようになります。
        /// </remarks>
        public void StartReceiveMessage(int resFrom, int timeout, DateTime?when = null)
        {
            using (var result = this.startingMessageLock.Lock())
            {
                if (result == null)
                {
                    throw new NicoLiveException(
                              "メッセージの受信開始処理をすでに行っています。");
                }

                using (new DebugLock(SyncRoot))
                {
                    // 送信するメッセージの組み立て
                    var message = string.Empty;
                    if (when == null)
                    {
                        // 通常のコメント取得
                        message = NicoString.MakeThreadStart(
                            ThreadId, resFrom);
                    }
                    else
                    {
                        // 過去ログの取得
                        var waybackkey = LiveUtil.GetWaybackKey(
                            ThreadId, this.commentClient.CookieContainer);

                        message = NicoString.MakeThreadStart(
                            ThreadId, resFrom, this.commentClient.UserId,
                            waybackkey, when.Value);
                    }

                    // メッセージの受信を開始します。
                    this.startMessageEvent.Reset();
                    SendMessageSync(message);
                }

                // startMessageEventがシグナル状態にならなかった場合、
                // サーバーからのメッセージ受信に失敗しています。
                if (!this.startMessageEvent.WaitOne(timeout))
                {
                    throw new NicoLiveException(
                              "メッセージの受信開始処理に失敗しました。",
                              this.commentClient.LiveIdString);
                }
            }
        }