/// <summary> /// チケットの生成に必要な情報をもとにチケットを生成します /// </summary> /// <param name="basicStatus"></param> /// <param name="messageStatus"></param> /// <param name="liveDescription"></param> public LiveTicket(NicoApiSharp.Streaming.IBasicStatus basicStatus, NicoApiSharp.Streaming.IMessageServerStatus messageStatus, NicoApiSharp.Streaming.IDescription description) { this._id = basicStatus.Id; this._communityId = basicStatus.CommunityId; this._startTime = basicStatus.StartTime; this._localStartTime = basicStatus.LocalStartTime; this._roomLabel = basicStatus.RoomLabel; this._address = messageStatus.Address; this._port = messageStatus.Port; this._thread = messageStatus.Thread; this._title = description.Title; this._communityName = description.CommunityName; this._caster = description.Caster; this._description = description.Description; }
/// <summary> /// メッセージサーバーからチャットを受け取ったときに実行される /// ただし、過去ログ分については呼び出されない /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void OnReceivedChat(object sender, NicoApiSharp.Streaming.ChatReceiver.ChatReceiveEventArgs e) { if (_mainview != null) { OcvChat ochat = new OcvChat(e.Chat); NotifyReceiveChat(ochat); } }
/// <summary> /// MessageServerStatusで指定されたコメントをすべて取得する /// (用途は未定、なんとなく作った) /// </summary> /// <param name="messageServerStatus"></param> /// <returns></returns> public bool GetLogComment(NicoApiSharp.Streaming.IMessageServerStatus messageServerStatus) { if (messageServerStatus != null) { if (_accountInfomation == null) { _mainview.ShowFatalMessage("ログインが完了していません"); return false; } _chats.Clear(); _ngChecker.Initialize(this); _messageServerStatus = messageServerStatus; NicoApiSharp.Chat[] chats = NicoApiSharp.Streaming.ChatReceiver.ReceiveAllLog(_messageServerStatus, _accountInfomation.UserId); foreach (NicoApiSharp.Chat chat in chats) { _chats.Add(new OcvChat(chat)); } // プラグインには開始通知の直後に終了通知する OnStartLive(null, null); OnDisconnectServer(null, EventArgs.Empty); return true; } return false; }
/// <summary> /// メッセージサーバーからThreadを受け取ったときに実行される /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void OnStartLive(object sender, NicoApiSharp.Streaming.ChatReceiver.ConnectServerEventArgs e) { if (_mainview != null) { _mainview.ShowStatusMessage("メッセージサーバーに接続しました"); //DateTime start = DateTime.Now; _ngChecker.Check(_chats); //TimeSpan spa = DateTime.Now - start; //_mainview.ShowStatusMessage(spa.TotalMilliseconds.ToString()); // プラグインに通知 foreach (Hal.NCSPlugin.IPlugin plugin in _plugins) { plugin.OnLiveStart(this.Id, this.ServerStartTime, _chats.Count); } // デバッグ用にチケットをすべて保存する LiveTicket log = GetLiveTicket(); if (log != null) { string fileName = log.Id + (_seetType == SeetType.Arena ? "Arena" : "Standing") + ".xml"; string path = System.IO.Path.Combine(ApplicationSettings.Default.LiveTicketsFolder, fileName); Utility.Serialize(path, log, typeof(LiveTicket)); } } }
/// <summary> /// 与えられた情報を元にメッセージサーバーに接続を試みる /// </summary> /// <param name="accountInfomation">アカウント情報</param> /// <param name="liveDescription">放送の詳細情報</param> /// <param name="messageServerStatus">メッセージサーバにアクセスするための情報</param> /// <returns>接続に成功したか</returns> protected bool ConnectServer(NicoApiSharp.IAccountInfomation accountInfomation, NicoApiSharp.Streaming.IDescription description, NicoApiSharp.Streaming.IMessageServerStatus messageServerStatus) { if (accountInfomation == null) { _mainview.ShowFatalMessage("ログインが完了していません"); return false; } _chatReceiver.Disconnect(); _chats.Clear(); _ngChecker.Initialize(this); UserSettings.Default.LastAccessId = description.Id; UserSettings.Default.Save(); NicoApiSharp.Chat[] chats = NicoApiSharp.Streaming.ChatReceiver.ReceiveAllLog(messageServerStatus, accountInfomation.UserId); if (chats != null) { foreach (NicoApiSharp.Chat chat in chats) { _chats.Add(new OcvChat(chat)); } return _chatReceiver.Connect(messageServerStatus, chats.Length + 1); } else { return _chatReceiver.Connect(messageServerStatus, -1000); } }