public bool ConnectServer(IPAddress srvIP, UInt32 srvPort, UInt32 waitPort, Action <CMD_STREAM, CMD_STREAM> pfnCmdProc) { connectFlag = false; cmdProc = pfnCmdProc; StartTCPServer(waitPort); pollingClient = null; cmd.SetSendMode(true); cmd.SetNWSetting(srvIP.ToString(), srvPort); var status = new NotifySrvInfo(); if (waitPort == 0 && cmd.SendGetNotifySrvStatus(ref status) != ErrCode.CMD_SUCCESS || waitPort != 0 && cmd.SendRegistTCP(waitPort) != ErrCode.CMD_SUCCESS) { //サーバが存在しないかロングポーリングに未対応 return(false); } else { connectFlag = true; connectedIP = srvIP; connectedPort = srvPort; serverPort = waitPort; if (waitPort == 0) { pollingClient = new TcpClient(); StartPolling(pollingClient, srvIP, srvPort, 0); } return(true); } }
public NotifySrvInfoItem(NotifySrvInfo info, bool delCrlf = true) { Time = info.time.ToString("yyyy\\/MM\\/dd HH\\:mm\\:ss.fff"); TimeView = info.time.ToString("yyyy\\/MM\\/dd(ddd) HH\\:mm\\:ss.fff"); var notifyID = (UpdateNotifyItem)info.notifyID; Title = notifyID == UpdateNotifyItem.PreRecStart ? "予約録画開始準備" : notifyID == UpdateNotifyItem.RecStart ? "録画開始" : notifyID == UpdateNotifyItem.RecEnd ? "録画終了" : notifyID == UpdateNotifyItem.RecTuijyu ? "追従発生" : notifyID == UpdateNotifyItem.ChgTuijyu ? "番組変更" : notifyID == UpdateNotifyItem.PreEpgCapStart ? "EPG取得" : notifyID == UpdateNotifyItem.EpgCapStart ? "EPG取得" : notifyID == UpdateNotifyItem.EpgCapEnd ? "EPG取得" : info.notifyID.ToString(); LogText = notifyID == UpdateNotifyItem.EpgCapStart ? "開始" : notifyID == UpdateNotifyItem.EpgCapEnd ? "終了" : info.param4; if (delCrlf == true) { LogText = LogText.Replace("\r\n↓\r\n", " → "); } if (delCrlf == true) { LogText = LogText.Replace("\r\n", " "); } keyID = (ulong)this.ToString().GetHashCode(); }
private void NotifyStatus(NotifySrvInfo status) { switch ((UpdateNotifyItem)status.notifyID) { case UpdateNotifyItem.EpgData: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); CommonManager.Instance.DB.ReloadEpgData(); SocketAction.SendAllMessage("UPDATED EPG"); } break; case UpdateNotifyItem.ReserveInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.ReloadReserveInfo(); SocketAction.SendAllMessage("UPDATED RESERVE"); } break; case UpdateNotifyItem.RecInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.ReloadRecFileInfo(); SocketAction.SendAllMessage("UPDATED REC"); } break; case UpdateNotifyItem.AutoAddEpgInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.ReloadEpgAutoAddInfo(); SocketAction.SendAllMessage("UPDATED AUTO"); } break; case UpdateNotifyItem.AutoAddManualInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); CommonManager.Instance.DB.ReloadManualAutoAddInfo(); SocketAction.SendAllMessage("UPDATED MAN"); } break; case UpdateNotifyItem.SrvStatus: { if (status.param1 == 1) { Console.Title = "録画中: EpgTimerWeb2"; } else if (status.param1 == 2) { Console.Title = "EPG取得中: EpgTimerWeb2"; } else { Console.Title = "EpgTimerWeb2"; } } break; default: break; } }
public static bool ReadStreamData(ref NotifySrvInfo value, CMD_STREAM cmd) { try { int iPos = 0; UInt16 ver = BitConverter.ToUInt16(cmd.bData, iPos); iPos += sizeof(UInt16); UInt32 size = BitConverter.ToUInt32(cmd.bData, iPos); iPos += sizeof(UInt32); if (size > cmd.bData.Length - 2) { return false; } if (ReadData(ver, ref value.notifyID, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.time, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param1, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param2, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param3, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param4, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param5, cmd.bData, ref iPos) == false) { return false; } if (ReadData(ver, ref value.param6, cmd.bData, ref iPos) == false) { return false; } } catch { return false; } return true; }
public static bool ReadStreamData(ref NotifySrvInfo value, CMD_STREAM cmd) { try { int iPos = 0; UInt16 ver = BitConverter.ToUInt16(cmd.bData, iPos); iPos += sizeof(UInt16); UInt32 size = BitConverter.ToUInt32(cmd.bData, iPos); iPos += sizeof(UInt32); if (size > cmd.bData.Length - 2) { return(false); } if (ReadData(ver, ref value.notifyID, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.time, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param1, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param2, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param3, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param4, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param5, cmd.bData, ref iPos) == false) { return(false); } if (ReadData(ver, ref value.param6, cmd.bData, ref iPos) == false) { return(false); } } catch { return(false); } return(true); }
public NotifySrvInfoItem(NotifySrvInfo info) { Time = info.time.ToString("yyyy/MM/dd HH:mm:ss.fff"); UpdateNotifyItem notifyID = (UpdateNotifyItem)info.notifyID; Title = notifyID == UpdateNotifyItem.PreRecStart ? "予約録画開始準備" : notifyID == UpdateNotifyItem.RecStart ? "録画開始" : notifyID == UpdateNotifyItem.RecEnd ? "録画終了" : notifyID == UpdateNotifyItem.RecTuijyu ? "追従発生" : notifyID == UpdateNotifyItem.ChgTuijyu ? "番組変更" : notifyID == UpdateNotifyItem.PreEpgCapStart ? "EPG取得" : notifyID == UpdateNotifyItem.EpgCapStart ? "EPG取得" : notifyID == UpdateNotifyItem.EpgCapEnd ? "EPG取得" : info.notifyID.ToString(); LogText = notifyID == UpdateNotifyItem.EpgCapStart ? "開始" : notifyID == UpdateNotifyItem.EpgCapEnd ? "終了" : info.param4.Replace("\r\n", " "); }
public bool ConnectServer(IPAddress srvIP, UInt32 srvPort, UInt32 waitPort, Func <uint, byte[], Tuple <ErrCode, byte[], uint> > pfnCmdProc) { ConnectedIP = null; ConnectedPort = 0; cmdProc = pfnCmdProc; pollingClient = null; if (server == null && srvIP != null && waitPort != 0) { //TODO: 再接続などを考えるとこの生成方法は正確でないが、ほとんど互換のために残しているだけの機能なので適当 server = new TcpListener(srvIP.AddressFamily == AddressFamily.InterNetworkV6 ? IPAddress.IPv6Any : IPAddress.Any, (int)waitPort); server.Start(); server.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), server); } var cmd = new CtrlCmdUtil(); cmd.SetSendMode(true); cmd.SetNWSetting(srvIP, srvPort); var status = new NotifySrvInfo(); if (waitPort == 0 && cmd.SendGetNotifySrvStatus(ref status) != ErrCode.CMD_SUCCESS || waitPort != 0 && cmd.SendRegistTCP(waitPort) != ErrCode.CMD_SUCCESS) { //サーバが存在しないかロングポーリングに未対応 return(false); } else { ConnectedIP = srvIP; ConnectedPort = srvPort; if (waitPort == 0) { pollingClient = new TcpClient(srvIP.AddressFamily); StartPolling(pollingClient, srvIP, srvPort, 0); } return(true); } }
private void OutsideCmdCallback(CMD_STREAM pCmdParam, CMD_STREAM pResParam, bool networkFlag) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref exeCmd); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; System.Diagnostics.ProcessStartInfo startInfo; if (cmd.Length >= 3) { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1], cmd[2]); } else if (cmd.Length >= 2) { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1]); } else { startInfo = new System.Diagnostics.ProcessStartInfo(cmd[0]); } if (cmd.Length >= 2) { if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } } process = System.Diagnostics.Process.Start(startInfo); var w = new CtrlCmdWriter(new System.IO.MemoryStream()); w.Write(process.Id); w.Stream.Close(); pResParam.bData = w.Stream.ToArray(); pResParam.uiSize = (uint)pResParam.bData.Length; } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == false) ShowSleepDialog(param); })); } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: if (networkFlag) { pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; } else { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == true) return; SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { SaveData(); cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); var r = new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false)); ushort version = 0; r.Read(ref version); r.Version = version; r.Read(ref status); //通知の巡回カウンタをuiSizeを利用して返す(やや汚い) pCmdParam.uiSize = status.param3; Dispatcher.BeginInvoke(new Action(() => { if (closeFlag == false) NotifyStatus(status); })); } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } }
private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); epgView.UpdateEpgData(); } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); epgView.UpdateEpgData(); })); } } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; CmdStreamUtil.ReadStreamData(ref exeCmd, pCmdParam); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; if (cmd.Length >= 3) { process = System.Diagnostics.Process.Start(cmd[1], cmd[2]); } else if (cmd.Length >= 2) { process = System.Diagnostics.Process.Start(cmd[1]); } else { process = System.Diagnostics.Process.Start(cmd[0]); } CmdStreamUtil.CreateStreamData(process.Id, ref pResParam); } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; CmdStreamUtil.ReadStreamData(ref param, pCmdParam); ///////////////////////////////////////////紅//////////////////////////////////// ParameterizedThreadStart ts = new ParameterizedThreadStart(SuspendThread); Thread thread = new Thread(ts); thread.Start(param); ///////////////////////////////////////////////////////////////////////////////////// /*Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(0, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendSuspend(param); } }));*/ } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; CmdStreamUtil.ReadStreamData(ref param, pCmdParam); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 status = 0; CmdStreamUtil.ReadStreamData(ref status, pCmdParam); if (Dispatcher.CheckAccess() == true) { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } } else { Dispatcher.BeginInvoke(new Action(() => { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); CmdStreamUtil.ReadStreamData(ref status, pCmdParam); if (Dispatcher.CheckAccess() == true) { NotifyStatus(status); } else { Dispatcher.BeginInvoke(new Action(() => { NotifyStatus(status); })); } } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } return 0; }
void NotifyStatus(NotifySrvInfo status) { System.Diagnostics.Trace.WriteLine((UpdateNotifyItem)status.notifyID); switch ((UpdateNotifyItem)status.notifyID) { case UpdateNotifyItem.EpgData: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); if (PresentationSource.FromVisual(Application.Current.MainWindow) != null) { epgView.UpdateEpgData(); } GC.Collect(); } break; case UpdateNotifyItem.ReserveInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); } break; case UpdateNotifyItem.RecInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); recInfoView.UpdateInfo(); } break; case UpdateNotifyItem.AutoAddEpgInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); autoAddView.UpdateAutoAddInfo(); } break; case UpdateNotifyItem.AutoAddManualInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); autoAddView.UpdateAutoAddInfo(); } break; case UpdateNotifyItem.SrvStatus: { if (status.param1 == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status.param1 == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } } break; case UpdateNotifyItem.PreRecStart: { taskTray.ShowBalloonTip("予約録画開始準備", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.RecStart: { taskTray.ShowBalloonTip("録画開始", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.RecEnd: { taskTray.ShowBalloonTip("録画終了", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.RecTuijyu: { taskTray.ShowBalloonTip("追従発生", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.ChgTuijyu: { taskTray.ShowBalloonTip("番組変更", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.PreEpgCapStart: { taskTray.ShowBalloonTip("EPG取得", status.param4, 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.EpgCapStart: { taskTray.ShowBalloonTip("EPG取得", "開始", 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; case UpdateNotifyItem.EpgCapEnd: { taskTray.ShowBalloonTip("EPG取得", "終了", 10 * 1000); CommonManager.Instance.NotifyLogList.Add(status); } break; default: break; } CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } }
public NotifySrvInfoItem(NotifySrvInfo info) { NotifyInfo = info; }
public void AddNotifySave(NotifySrvInfo notifyInfo) { if (Settings.Instance.AutoSaveNotifyLog == 1) { String filePath = SettingPath.ModulePath; filePath += "\\Log"; Directory.CreateDirectory(filePath); filePath += "\\EpgTimerNotify_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; StreamWriter file = new StreamWriter(filePath, true, System.Text.Encoding.GetEncoding("shift_jis")); NotifySrvInfoItem info = new NotifySrvInfoItem(); info.NotifyInfo = notifyInfo; file.Write(info.FileLogText); file.Close(); } }
public void AddNotifySave(NotifySrvInfo notifyInfo) { if (Settings.Instance.AutoSaveNotifyLog == 1) { String filePath = SettingPath.ModulePath + "\\Log"; Directory.CreateDirectory(filePath); filePath += "\\EpgTimerNotify_" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; using (var file = new StreamWriter(filePath, true)) { file.Write((new NotifySrvInfoItem(notifyInfo)).FileLogText); } } }
void NotifyStatus(NotifySrvInfo status) { int IdleTimeSec = 10 * 60; int TimeOutMSec = 10 * 1000; var TaskTrayBaloonWork = new Action<string, string>((title, tips) => { if (CommonUtil.GetIdleTimeSec() < IdleTimeSec || idleShowBalloon == false) { taskTray.ShowBalloonTip(title, tips, TimeOutMSec); if (CommonUtil.GetIdleTimeSec() > IdleTimeSec) { idleShowBalloon = true; } } CommonManager.Instance.NotifyLogList.Add(status); CommonManager.Instance.AddNotifySave(status); }); System.Diagnostics.Trace.WriteLine((UpdateNotifyItem)status.notifyID); switch ((UpdateNotifyItem)status.notifyID) { case UpdateNotifyItem.SrvStatus: taskTray.Icon = GetTaskTrayIcon(status.param1); break; case UpdateNotifyItem.PreRecStart: TaskTrayBaloonWork("予約録画開始準備", status.param4); break; case UpdateNotifyItem.RecStart: TaskTrayBaloonWork("録画開始", status.param4); RefreshAllViewsReserveInfo(); break; case UpdateNotifyItem.RecEnd: TaskTrayBaloonWork("録画終了", status.param4); break; case UpdateNotifyItem.RecTuijyu: TaskTrayBaloonWork("追従発生", status.param4); break; case UpdateNotifyItem.ChgTuijyu: TaskTrayBaloonWork("番組変更", status.param4); break; case UpdateNotifyItem.PreEpgCapStart: TaskTrayBaloonWork("EPG取得", status.param4); break; case UpdateNotifyItem.EpgCapStart: TaskTrayBaloonWork("取得", "開始"); break; case UpdateNotifyItem.EpgCapEnd: TaskTrayBaloonWork("取得", "終了"); break; case UpdateNotifyItem.EpgData: { //NWでは重いが、使用している箇所多いので即取得する。 //自動取得falseのときはReloadEpgData()ではじかれているので元々読込まれない。 CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); CommonManager.Instance.DB.ReloadEpgData(); reserveView.UpdateInfo();//ジャンルや番組内容などが更新される infoWindowViewModel.UpdateInfo(); if (Settings.Instance.DisplayReserveAutoAddMissing == true) { tunerReserveView.UpdateInfo(); } autoAddView.epgAutoAddView.UpdateInfo();//検索数の更新 epgView.UpdateInfo(); SearchWindow.UpdatesInfo(); CommonManager.Instance.StatusNotifyAppend("EPGデータ更新 < "); GC.Collect(); } break; case UpdateNotifyItem.ReserveInfo: { //使用している箇所多いので即取得する。 //というより後ろでタスクトレイのルーチンが取得をかけるので遅延の効果がない。 CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.ReloadReserveInfo(); RefreshAllViewsReserveInfo(); CommonManager.Instance.StatusNotifyAppend("予約データ更新 < "); } break; case UpdateNotifyItem.RecInfo: { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); if (CommonManager.Instance.NWMode == false) { CommonManager.Instance.DB.ReloadrecFileInfo(); } recInfoView.UpdateInfo(); CommonManager.Instance.StatusNotifyAppend("録画済みデータ更新 < "); } break; case UpdateNotifyItem.AutoAddEpgInfo: { //使用箇所多いので即取得する。 CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.ReloadEpgAutoAddInfo(); autoAddView.epgAutoAddView.UpdateInfo(); if (Settings.Instance.DisplayReserveAutoAddMissing == true) { RefreshAllViewsReserveInfo(UpdateViewMode.ReserveInfoNoAutoAdd); } CommonManager.Instance.StatusNotifyAppend("キーワード予約データ更新 < "); } break; case UpdateNotifyItem.AutoAddManualInfo: { //使用箇所多いので即取得する。 CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); CommonManager.Instance.DB.ReloadManualAutoAddInfo(); autoAddView.manualAutoAddView.UpdateInfo(); if (Settings.Instance.DisplayReserveAutoAddMissing == true) { RefreshAllViewsReserveInfo(UpdateViewMode.ReserveInfoNoAutoAdd); } CommonManager.Instance.StatusNotifyAppend("プログラム予約登録データ更新 < "); } break; case UpdateNotifyItem.IniFile: { IniSetting.Instance.Clear(); if (CommonManager.Instance.NWMode == true) { IniFileHandler.UpdateSrvProfileIniNW(); RefreshAllViewsReserveInfo(); CommonManager.Instance.StatusNotifyAppend("設定ファイル転送 < "); } } break; default: break; } if (CommonUtil.GetIdleTimeSec() < IdleTimeSec) { idleShowBalloon = false; } taskTray.Text = GetTaskTrayReserveInfoText(); }
public void ChkTimerWork() { //オプション状態などが変っている場合もあるので、いったん破棄する。 if (chkTimer != null) { chkTimer.Stop(); chkTimer = null; } bool chkSrvRegistTCP = CommonManager.Instance.NWMode == true && Settings.Instance.ChkSrvRegistTCP == true; bool updateTaskText = Settings.Instance.UpdateTaskText == true; if (chkSrvRegistTCP == true || updateTaskText == true) { chkTimer = new DispatcherTimer(); chkTimer.Interval = TimeSpan.FromMinutes(Math.Max(Settings.Instance.ChkSrvRegistInterval, 1)); if (chkSrvRegistTCP == true) { chkTimer.Tick += (sender, e) => { if (CommonManager.Instance.NW.IsConnected == true) { var status = new NotifySrvInfo(); var waitPort = Settings.Instance.NWWaitPort; bool registered = true; if (waitPort == 0 && cmd.SendGetNotifySrvStatus(ref status) == ErrCode.CMD_SUCCESS || waitPort != 0 && cmd.SendIsRegistTCP(waitPort, ref registered) == ErrCode.CMD_SUCCESS) { if (waitPort == 0 && CommonManager.Instance.NW.OnPolling == false || waitPort != 0 && registered == false || taskTray.Icon == TaskIconSpec.TaskIconGray)//EpgTimerNW側の休止復帰も含む { if (ConnectSrv() == true) { CommonManager.Instance.StatusNotifyAppend("自動再接続 - "); } else { CommonManager.Instance.StatusNotifySet("自動再接続 - EpgTimerSrvへの再接続に失敗"); } } return; } } taskTray.Icon = TaskIconSpec.TaskIconGray; }; } if (updateTaskText == true) { chkTimer.Tick += (sender, e) => taskTray.Text = GetTaskTrayReserveInfoText(); } chkTimer.Start(); } }
private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam) { System.Diagnostics.Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; this.Visibility = System.Windows.Visibility.Visible; } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); reserveView.UpdateReserveData(); epgView.UpdateReserveData(); tunerReserveView.UpdateReserveData(); autoAddView.UpdateAutoAddInfo(); recInfoView.UpdateInfo(); CommonManager.Instance.DB.ReloadReserveInfo(); ReserveData item = new ReserveData(); if (CommonManager.Instance.DB.GetNextReserve(ref item) == true) { String timeView = item.StartTime.ToString("yyyy/MM/dd(ddd) HH:mm:ss ~ "); DateTime endTime = item.StartTime + TimeSpan.FromSeconds(item.DurationSecond); timeView += endTime.ToString("HH:mm:ss"); taskTray.Text = "次の予約:" + item.StationName + " " + timeView + " " + item.Title; } else { taskTray.Text = "次の予約なし"; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; if (Dispatcher.CheckAccess() == true) { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); if (CommonManager.Instance.NWMode == false) { CommonManager.Instance.DB.ReloadEpgData(); } epgView.UpdateEpgData(); } else { Dispatcher.BeginInvoke(new Action(() => { CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); if (CommonManager.Instance.NWMode == false) { CommonManager.Instance.DB.ReloadEpgData(); } epgView.UpdateEpgData(); })); } } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref exeCmd); try { string[] cmd = exeCmd.Split('\"'); System.Diagnostics.Process process; if (cmd.Length >= 3) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1], cmd[2]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } else if (cmd.Length >= 2) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[1]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } else { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(cmd[0]); if (cmd[1].IndexOf(".bat") >= 0) { startInfo.CreateNoWindow = true; if (Settings.Instance.ExecBat == 0) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; } else if (Settings.Instance.ExecBat == 1) { startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; } } process = System.Diagnostics.Process.Start(startInfo); } var w = new CtrlCmdWriter(new System.IO.MemoryStream()); w.Write(process.Id); w.Stream.Close(); pResParam.bData = w.Stream.ToArray(); pResParam.uiSize = (uint)pResParam.bData.Length; } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Dispatcher.BeginInvoke(new Action(() => ShowSleepDialog(param))); } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 param = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref param); Byte reboot = (Byte)((param & 0xFF00) >> 8); Byte suspendMode = (Byte)(param & 0x00FF); Dispatcher.BeginInvoke(new Action(() => { SuspendCheckWindow dlg = new SuspendCheckWindow(); dlg.SetMode(reboot, suspendMode); if (dlg.ShowDialog() != true) { cmd.SendReboot(); } })); } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 status = 0; (new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false))).Read(ref status); if (Dispatcher.CheckAccess() == true) { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } } else { Dispatcher.BeginInvoke(new Action(() => { if (status == 1) { taskTray.Icon = Properties.Resources.TaskIconRed; } else if (status == 2) { taskTray.Icon = Properties.Resources.TaskIconGreen; } else { taskTray.Icon = Properties.Resources.TaskIconBlue; } })); } } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; NotifySrvInfo status = new NotifySrvInfo(); var r = new CtrlCmdReader(new System.IO.MemoryStream(pCmdParam.bData, false)); ushort version = 0; r.Read(ref version); r.Version = version; r.Read(ref status); if (Dispatcher.CheckAccess() == true) { NotifyStatus(status); } else { Dispatcher.BeginInvoke(new Action(() => { NotifyStatus(status); })); } } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } return 0; }
private int OutsideCmdCallback(object pParam, CMD_STREAM pCmdParam, ref CMD_STREAM pResParam) { Trace.WriteLine((CtrlCmd)pCmdParam.uiParam); switch ((CtrlCmd)pCmdParam.uiParam) { case CtrlCmd.CMD_TIMER_GUI_SHOW_DLG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_RESERVE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.RecInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddEpgInfo); CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.AutoAddManualInfo); CommonManager.Instance.DB.ReloadReserveInfo(); SocketAction.SendAllMessage("UPDATED RESERVE"); } break; case CtrlCmd.CMD_TIMER_GUI_UPDATE_EPGDATA: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.EpgData); CommonManager.Instance.DB.ReloadEpgData(); SocketAction.SendAllMessage("UPDATED EPG"); } break; case CtrlCmd.CMD_TIMER_GUI_VIEW_EXECUTE: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; String exeCmd = ""; CmdStreamUtil.ReadStreamData(ref exeCmd, pCmdParam); try { string[] cmd = exeCmd.Split('\"'); Process process; if (cmd.Length >= 3) { process = Process.Start(cmd[1], cmd[2]); } else if (cmd.Length >= 2) { process = Process.Start(cmd[1]); } else { process = Process.Start(cmd[0]); } CmdStreamUtil.CreateStreamData(process.Id, ref pResParam); } catch { } } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_SUSPEND: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; } break; case CtrlCmd.CMD_TIMER_GUI_QUERY_REBOOT: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_CHG: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; UInt16 status = 0; CmdStreamUtil.ReadStreamData(ref status, pCmdParam); if (status == 1) //Rec { } else if (status == 2) //EPG { } else { } } break; case CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2: { pResParam.uiParam = (uint)ErrCode.CMD_SUCCESS; var Status = new NotifySrvInfo(); CmdStreamUtil.ReadStreamData(ref Status, pCmdParam); var Notify = new NotifySrvInfoItem(); Notify.NotifyInfo = Status; if (Notify.Title != "") { SocketAction.SendAllMessage("EVENT " + JsonUtil.Serialize(Notify, false)); //Console.WriteLine("\n" + (Notify.Title + Notify.LogText).Replace("\n", "")); EventStore.Instance.AddMessage(Notify); } NotifyStatus(Status); } break; default: pResParam.uiParam = (uint)ErrCode.CMD_NON_SUPPORT; break; } return 0; }
public bool ConnectServer(IPAddress srvIP, UInt32 srvPort, UInt32 waitPort, Action<CMD_STREAM, CMD_STREAM> pfnCmdProc) { connectFlag = false; cmdProc = pfnCmdProc; StartTCPServer(waitPort); pollingClient = null; cmd.SetSendMode(true); cmd.SetNWSetting(srvIP.ToString(), srvPort); var status = new NotifySrvInfo(); if (waitPort == 0 && cmd.SendGetNotifySrvStatus(ref status) != ErrCode.CMD_SUCCESS || waitPort != 0 && cmd.SendRegistTCP(waitPort) != ErrCode.CMD_SUCCESS) { //サーバが存在しないかロングポーリングに未対応 return false; } else { connectFlag = true; connectedIP = srvIP; connectedPort = srvPort; serverPort = waitPort; if (waitPort == 0) { pollingClient = new TcpClient(); StartPolling(pollingClient, srvIP, srvPort, 0); } return true; } }
public bool ConnectServer(IPAddress srvIP, uint srvPort, uint waitPort, Func <uint, byte[], Tuple <ErrCode, byte[], uint> > cmdProc) { StopWorker(); if (srvIP != null && waitPort != 0) { //待ち受け方式(互換のために残しているだけ) var server = new TcpListener(srvIP.AddressFamily == AddressFamily.InterNetworkV6 ? IPAddress.IPv6Any : IPAddress.Any, (int)waitPort); server.Start(); stopEvent = new AutoResetEvent(false); workerThread = new Thread(() => { for (;;) { TcpClient client; IAsyncResult ar = server.BeginAcceptTcpClient(null, null); using (ar.AsyncWaitHandle) { if (WaitHandle.WaitAny(new WaitHandle[] { stopEvent, ar.AsyncWaitHandle }) != 1) { server.Stop(); ar.AsyncWaitHandle.WaitOne(); break; } client = server.EndAcceptTcpClient(ar); } using (client) using (NetworkStream stream = client.GetStream()) { byte[] bHead = new byte[8]; if (ReadAll(stream, bHead, 0, 8) == 8) { uint cmdParam = BitConverter.ToUInt32(bHead, 0); byte[] cmdData = new byte[BitConverter.ToUInt32(bHead, 4)]; if (ReadAll(stream, cmdData, 0, cmdData.Length) == cmdData.Length) { Tuple <ErrCode, byte[], uint> res = cmdProc(cmdParam, cmdData); BitConverter.GetBytes((uint)res.Item1).CopyTo(bHead, 0); BitConverter.GetBytes(res.Item2 == null ? 0 : res.Item2.Length).CopyTo(bHead, 4); stream.Write(bHead, 0, 8); if (res.Item2 != null && res.Item2.Length > 0) { stream.Write(res.Item2, 0, res.Item2.Length); } } } } } server.Stop(); }); workerThread.Start(); } var cmd = new CtrlCmdUtil(); cmd.SetSendMode(true); cmd.SetNWSetting(srvIP, srvPort); var status = new NotifySrvInfo(); if (waitPort == 0 && cmd.SendGetNotifySrvStatus(ref status) != ErrCode.CMD_SUCCESS || waitPort != 0 && cmd.SendRegistTCP(waitPort) != ErrCode.CMD_SUCCESS) { //サーバが存在しないかロングポーリングに未対応 StopWorker(); return(false); } else if (waitPort == 0) { //ロングポーリング方式 stopEvent = new AutoResetEvent(false); workerThread = new Thread(() => { uint targetCount = 0; for (;;) { //巡回カウンタがtargetCountよりも大きくなる新しい通知を待ち受ける var w = new CtrlCmdWriter(new MemoryStream()); w.Write((ushort)0); w.Write(targetCount); byte[] bHead = new byte[8 + w.Stream.Length]; BitConverter.GetBytes((uint)CtrlCmd.CMD_EPG_SRV_GET_STATUS_NOTIFY2).CopyTo(bHead, 0); BitConverter.GetBytes((uint)w.Stream.Length).CopyTo(bHead, 4); w.Stream.Close(); w.Stream.ToArray().CopyTo(bHead, 8); using (var client = new TcpClient(srvIP.AddressFamily)) { try { client.Connect(srvIP, (int)srvPort); } catch (SocketException ex) { System.Diagnostics.Trace.WriteLine(ex); //少し待つ if (stopEvent.WaitOne(5000)) { break; } continue; } using (NetworkStream stream = client.GetStream()) { stream.Write(bHead, 0, bHead.Length); int readSize; IAsyncResult ar = stream.BeginRead(bHead, 0, 8, null, null); using (ar.AsyncWaitHandle) { if (WaitHandle.WaitAny(new WaitHandle[] { stopEvent, ar.AsyncWaitHandle }) != 1) { stream.Dispose(); ar.AsyncWaitHandle.WaitOne(); break; } try { readSize = stream.EndRead(ar); } catch (IOException ex) { System.Diagnostics.Trace.WriteLine(ex); //少し待つ if (stopEvent.WaitOne(5000)) { break; } continue; } } if (readSize > 0 && ReadAll(stream, bHead, readSize, 8 - readSize) == 8 - readSize) { uint cmdParam = BitConverter.ToUInt32(bHead, 0); byte[] cmdData = new byte[BitConverter.ToUInt32(bHead, 4)]; if (ReadAll(stream, cmdData, 0, cmdData.Length) == cmdData.Length && cmdParam == (uint)ErrCode.CMD_SUCCESS) { //通常の通知コマンドに変換 targetCount = cmdProc((uint)CtrlCmd.CMD_TIMER_GUI_SRV_STATUS_NOTIFY2, cmdData).Item3; } } } } } }); workerThread.Start(); } return(true); }
/// <summary>現在のNOTIFY_UPDATE_SRV_STATUSを取得する</summary> public ErrCode SendGetNotifySrvStatus(ref NotifySrvInfo val) { object o = val; return(SendAndReceiveCmdData2(CtrlCmd.CMD_EPG_SRV_GET_STATUS_NOTIFY2, 0, ref o)); }