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