private static Process FindTVTestProcess(string type) { foreach (Process p in Process.GetProcesses()) { // 原作と異なりプロセス名ではなく接続待機用イベントの有無で判断するので注意 try { using (System.Threading.EventWaitHandle.OpenExisting( "Global\\" + type + "_Ctrl_BonConnect_" + p.Id, System.Security.AccessControl.EventWaitHandleRights.Synchronize)) { } // 識別用IDが設定されたViewアプリは除外する if (type == "View") { var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\View_Ctrl_BonConnect_" + p.Id, "\\\\.\\pipe\\View_Ctrl_BonPipe_" + p.Id); cmdTvTest.SetConnectTimeOut(1000); int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { continue; } } return(p); } catch { } } return(null); }
public bool StartStreamingPlay(String filePath, IPAddress srvIP, UInt32 srvPort) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } UInt32 ctrlID = 0; ErrCode err = CommonManager.CreateSrvCtrl().SendNwPlayOpen(filePath, ref ctrlID); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "まだ録画が開始されていません。"); return(false); } OpenTVTest(Settings.Instance.TvTestOpenWait, "TvTest"); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\TvTest_Ctrl_BonConnect_" + process.Id, "TvTest_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); UInt32 ip = 0x7F000001; if (srvIP != null && srvIP.GetAddressBytes().Length == 4) { byte[] oct = srvIP.GetAddressBytes(); ip = (uint)oct[0] << 24 | (uint)oct[1] << 16 | (uint)oct[2] << 8 | oct[3]; } TVTestStreamingInfo sendInfo = new TVTestStreamingInfo(); sendInfo.enableMode = 1; sendInfo.ctrlID = ctrlID; sendInfo.serverIP = ip; sendInfo.serverPort = srvPort; if (Settings.Instance.NwTvModeUDP == true) { sendInfo.udpSend = 1; } if (Settings.Instance.NwTvModeTCP == true) { sendInfo.tcpSend = 1; } for (int i = 0; i < 10 && cmdTvTest.SendViewSetStreamingInfo(sendInfo) != ErrCode.CMD_SUCCESS; i++) { System.Threading.Thread.Sleep(1000); } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
public void CloseTVTest() { if (process != null && process.HasExited == false) { var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, "\\\\.\\pipe\\" + processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); cmdTvTest.SendViewAppClose(); } process = null; if (Settings.Instance.NwTvMode == true) { cmd.SendNwTVClose(); } }
private static Process FindTVTestProcess(string type) { Process[] processes = Process.GetProcesses(); foreach (Process p in processes) { // 原作と異なりプロセス名ではなく接続待機用イベントの有無で判断するので注意 try { using (System.Threading.EventWaitHandle.OpenExisting( "Global\\" + type + "_Ctrl_BonConnect_" + p.Id, System.Security.AccessControl.EventWaitHandleRights.Synchronize)) { } if (type == "View") { // TVTestではなさそうなViewアプリは除外する(※EpgDataCap_BonもViewアプリ) if (p.ProcessName.Equals(System.IO.Path.GetFileNameWithoutExtension(Settings.Instance.TvTestExe), StringComparison.OrdinalIgnoreCase) == false) { continue; } // 識別用IDが設定されたViewアプリは除外する var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\View_Ctrl_BonConnect_" + p.Id, "View_Ctrl_BonPipe_" + p.Id); cmdTvTest.SetConnectTimeOut(1000); int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { continue; } } foreach (Process pp in processes.Where(pp => pp != p)) { pp.Dispose(); } return(p); } catch { } } foreach (Process p in processes) { p.Dispose(); } return(null); }
public void CloseTVTest() { if (process != null) { if (process.HasExited == false) { var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); cmdTvTest.SendViewAppClose(); } process.Dispose(); } process = null; if (Settings.Instance.NwTvMode == true) { CommonManager.CreateSrvCtrl().SendNwTVClose(); } }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } OpenTVTest(Settings.Instance.TvTestOpenWait, Settings.Instance.NwTvMode == false); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = "BonDriver_TCP.dll"; } if (CommonManager.CreateSrvCtrl().SendNwTVMode(nwMode) == ErrCode.CMD_SUCCESS) { if (CommonManager.CreateSrvCtrl().SendNwTVSetCh(chInfo) == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } if (val.Equals(nwBonDriver, StringComparison.OrdinalIgnoreCase) == false) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } break; } } } } else { UInt64 key = ((UInt64)ONID) << 32 | ((UInt64)TSID) << 16 | ((UInt64)SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendGetChgChTVTest(key, ref chInfo); if (err == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } // 識別用IDが設定されたViewアプリは弄らない if (processType == "View") { int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { break; } } if (val.Equals(chInfo.bonDriver, StringComparison.OrdinalIgnoreCase) == false) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } break; } } else { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
public bool StartStreamingPlay(string filePath, uint reserveID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } if (CommonManager.Instance.NWMode == false) { if (IniFileHandler.GetPrivateProfileInt("SET", "EnableTCPSrv", 0, SettingPath.TimerSrvIniPath) == 0) { MessageBox.Show("動作設定でネットワーク接続を許可する必要があります。"); return(false); } } var sendInfo = new TVTestStreamingInfo(); if (filePath == null) { var playInfo = new NWPlayTimeShiftInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendNwTimeShiftOpen(reserveID, ref playInfo); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "まだ録画が開始されていません。"); return(false); } sendInfo.ctrlID = playInfo.ctrlID; sendInfo.filePath = playInfo.filePath; } else { ErrCode err = CommonManager.CreateSrvCtrl().SendNwPlayOpen(filePath, ref sendInfo.ctrlID); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "ファイルを開けませんでした。"); return(false); } } OpenTVTest(1000, false); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\TvTest_Ctrl_BonConnect_" + process.Id, "TvTest_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); sendInfo.enableMode = 1; if (CommonManager.Instance.NWMode == false) { sendInfo.serverIP = 0x7F000001; // 原作はここで自ホスト名を取得して解決したアドレスを格納している。(ないとは思うが)不具合があれば戻すこと sendInfo.serverPort = (UInt32)IniFileHandler.GetPrivateProfileInt("SET", "TCPPort", 4510, SettingPath.TimerSrvIniPath); } else { sendInfo.serverIP = 0x7F000001; IPAddress srvIP = CommonManager.Instance.NWConnectedIP; if (srvIP != null && srvIP.GetAddressBytes().Length == 4) { byte[] oct = srvIP.GetAddressBytes(); sendInfo.serverIP = (uint)oct[0] << 24 | (uint)oct[1] << 16 | (uint)oct[2] << 8 | oct[3]; } sendInfo.serverPort = CommonManager.Instance.NWConnectedPort; } if (Settings.Instance.NwTvModeUDP == true) { sendInfo.udpSend = 1; } if (Settings.Instance.NwTvModeTCP == true) { sendInfo.tcpSend = 1; } for (int i = 0; i < 10 && cmdTvTest.SendViewSetStreamingInfo(sendInfo) != ErrCode.CMD_SUCCESS; i++) { System.Threading.Thread.Sleep(1000); } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } if (IsOpenTVTest() == false) { processID = FindTVTestProcess(); if (processID == -1) { Process process; process = System.Diagnostics.Process.Start(Settings.Instance.TvTestExe, Settings.Instance.TvTestCmd); processID = process.Id; System.Threading.Thread.Sleep(Settings.Instance.TvTestOpenWait); } } cmdTvTest.SetPipeSetting("Global\\TvTest_Ctrl_BonConnect_" + processID.ToString(), "\\\\.\\pipe\\TvTest_Ctrl_BonPipe_" + processID.ToString()); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = "BonDriver_TCP.dll"; } if (cmd.SendNwTVMode(nwMode) == 1) { if (cmd.SendNwTVSetCh(chInfo) == 1) { String val = ""; if (cmdTvTest.SendViewGetBonDrivere(ref val) == 1) { if (String.Compare(val, nwBonDriver, true) != 0) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } } } } } else { UInt64 key = ((UInt64)ONID) << 32 | ((UInt64)TSID) << 16 | ((UInt64)SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); UInt32 err = cmd.SendGetChgChTVTest(key, ref chInfo); if (err == 1) { String val = ""; if (cmdTvTest.SendViewGetBonDrivere(ref val) == 1) { if (String.Compare(val, chInfo.bonDriver, true) != 0) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == 1) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } } } else if (err == 205) { MessageBox.Show("サーバーに接続できませんでした"); return(false); } else { MessageBox.Show("指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(processID); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } // TVTestのパスが録画用アプリと一致する場合はViewアプリとして扱う bool isView = CommonManager.Instance.NWMode == false && Settings.Instance.NwTvMode == false && string.Compare(IniFileHandler.GetPrivateProfileString("SET", "RecExePath", "", SettingPath.CommonIniPath), Settings.Instance.TvTestExe, true) == 0; OpenTVTest(Settings.Instance.TvTestOpenWait, isView ? "View" : "TvTest"); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, "\\\\.\\pipe\\" + processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = "BonDriver_TCP.dll"; } if (cmd.SendNwTVMode(nwMode) == ErrCode.CMD_SUCCESS) { if (cmd.SendNwTVSetCh(chInfo) == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } if (String.Compare(val, nwBonDriver, true) != 0) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } break; } } } } else { UInt64 key = CommonManager.Create64Key(ONID, TSID, SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); ErrCode err = cmd.SendGetChgChTVTest(key, ref chInfo); if (err == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } // 識別用IDが設定されたViewアプリは弄らない if (processType == "View") { int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { break; } } if (String.Compare(val, chInfo.bonDriver, true) != 0) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } break; } } else if (err == ErrCode.CMD_ERR_CONNECT) { MessageBox.Show("サーバーに接続できませんでした"); return(false); } else { MessageBox.Show("指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }