private string GetSavePosStatus(int nCh) { #region string strStatus = ""; while (true)//다른 메세지도 같이 오기 때문에 계속 읽어오면서 필터링 { AUTHORITY_PACKET AuthPacket = RecvAuthorityCmd(nCh); if (AuthPacket.bySTX == 0 || AuthPacket.byETX == 0) { break; } if (AuthPacket.byCmdGroup == CommandPTZFAbsMove.CMDGROUP_PTZFABSMOVE) { if (AuthPacket.byCmdType == CommandPTZFAbsMove.CMDTYPE_PTZFABSMOVE_RESP_SAVEPOS) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); strStatus = receiveddata; break; } } } return(strStatus); #endregion }
private string GetPanTiltHomeStatus() { #region string strStatus = ""; while (true)//다른 메세지도 같이 오기 때문에 계속 읽어오면서 필터링 { AUTHORITY_PACKET AuthPacket = RecvAuthorityCmd(); if (AuthPacket.bySTX == 0 || AuthPacket.byETX == 0) { break; } if (AuthPacket.byCmdGroup == CommandPanTiltInit.CMDGROUP_PANTILTINIT) { if (AuthPacket.byCmdType == CommandPanTiltInit.CMDTYPE_PANTILTINIT_RESP_HOMEPOS) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); strStatus = receiveddata; break; } } } return(strStatus); #endregion }
private string GetPanMoveStatus() { #region string strStatus = ""; while (true)//다른 메세지도 같이 오기 때문에 계속 읽어오면서 필터링 { AUTHORITY_PACKET AuthPacket = RecvAuthorityCmd(); if (AuthPacket.bySTX == 0 || AuthPacket.byETX == 0) { break; } if (AuthPacket.byCmdGroup == CommandPTZReqResp.CMDGROUP_PTZREQ) { if (AuthPacket.byCmdType == CommandPTZReqResp.CMDTYPE_PTZREQ_PAN_MOVESTATUS_RESP) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); strStatus = receiveddata; break; } } } return(strStatus); #endregion }
private string GetThermCamPowerStatus() { #region string strStatus = ""; while (true)//다른 메세지도 같이 오기 때문에 계속 읽어오면서 필터링 { AUTHORITY_PACKET AuthPacket = RecvAuthorityCmd(); if (AuthPacket.bySTX == 0 || AuthPacket.byETX == 0) { break; } if (AuthPacket.byCmdGroup == CommandPowerMgt.CMDGROUP_POWERMGT) { if (AuthPacket.byCmdType == CommandPowerMgt.CMDTYPE_POWERMGT_THERMCAM_PWR_STATUS) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); strStatus = receiveddata; break; } } } return(strStatus); #endregion }
private void SendAuthorityCmd(int nCh, byte byCmdGroup, byte byCmdType, string authData = "") { AUTHORITY_PACKET authorityPacket = AuthorityCommUtil.MakeAuthorityPacket("stevenYeun", byCmdGroup, byCmdType, authData); byte[] packet = AuthorityCommUtil.StructureToByte(authorityPacket); try { udpSock.SendToRelayServer(nCh, packet); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private bool SendAuthorityCmd(int nCh, byte byCmdGroup, byte byCmdType, string authData = "") { AUTHORITY_PACKET authorityPacket = AuthorityCommUtil.MakeAuthorityPacket("PowerPanTiltSetup", byCmdGroup, byCmdType, authData); byte[] packet = AuthorityCommUtil.StructureToByte(authorityPacket); try { udpSock.SendToRelayServer(nCh, packet); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return(false); } return(true); }
private void AddPresetRow_Click(object sender, RoutedEventArgs e) { int nIndex = m_nCh - 1; int nCh = m_nCh; //패킷 전송 SendAuthorityCmd(m_nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_PANTILT_POS_REQ); //패킷 수신 및 분석 string strPanAbs = ""; string strTiltAbs = ""; string strZoom = ""; string strFocus = ""; while (true)//다른 메세지도 같이 오기 때문에 계속 읽어오면서 필터링 { AUTHORITY_PACKET AuthPacket = RecvAuthorityCmd(nCh); if (AuthPacket.bySTX == 0 || AuthPacket.byETX == 0) { break; } if (AuthPacket.byCmdGroup == CommandPTZReqResp.CMDGROUP_PTZREQ) { if (AuthPacket.byCmdType == CommandPTZReqResp.CMDTYPE_PTZREQ_PANTILT_POS_RESP) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); int index1 = receiveddata.IndexOf(';'); //index1 += 1; strPanAbs = receiveddata.Substring(0, index1); strTiltAbs = receiveddata.Substring(index1 + 1, receiveddata.Length - index1 - 1); SendAuthorityCmd(m_nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_DAYZF_POS_REQ); } if (AuthPacket.byCmdType == CommandPTZReqResp.CMDTYPE_PTZREQ_DAYZF_POS_RESP) { string receivedName = AuthorityCommUtil.ByteToString(AuthPacket.srcName.name); string receiveddata = AuthorityCommUtil.ByteToString(AuthPacket.authorityData.data); int index1 = receiveddata.IndexOf(';'); //index1 += 1; strZoom = receiveddata.Substring(0, index1); strFocus = receiveddata.Substring(index1 + 1, receiveddata.Length - index1 - 1); } } } if (strPanAbs != "" && strTiltAbs != "" && strZoom != "" && strFocus != "") { //화면에 업데이트 this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { this.PanAbs.Text = strPanAbs; this.TiltAbs.Text = strTiltAbs; this.Zoom.Text = strZoom; this.Focus.Text = strFocus; })); } else { MessageBox.Show("팬/틸트 줌/포커스 값 수신 실패"); return; } ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////// //프리셋 리스트 저장 int no = m_arrPresetListReadWrite[nIndex].GetNumberOfPreset(); string name = Name.Text; int time = 0; double panAbs = 0; double tiltAbs = 0; int zoom = 0; int focus = 0; try { //수동 입력 /* * time = int.Parse(Time.Text); * panAbs = double.Parse(PanAbs.Text); * tiltAbs = double.Parse(TiltAbs.Text); * zoom = int.Parse(Zoom.Text); * focus = int.Parse(Focus.Text); */ //리스트에 저장할 변수들 time = int.Parse(Time.Text);//수동 입력 panAbs = double.Parse(strPanAbs); tiltAbs = double.Parse(strTiltAbs); zoom = int.Parse(strZoom); focus = int.Parse(strFocus); } catch (Exception ee) { //MessageBox.Show(ee.ToString()); MessageBox.Show("입력된 값이 잘못되었습니다."); return; } PresetListRow row = new PresetListRow(Name.Text, time, panAbs, tiltAbs, zoom, focus); bool ret = m_arrPresetListReadWrite[nIndex].AddPresetRow(row); if (ret == false) { MessageBox.Show("프리셋 그룹 파일이 없습니다.");//프리셋 추가 실패 return; } PresetListView.ItemsSource = m_arrPresetListReadWrite[nIndex].GetPresetList(); }
private static void CreateTCPClient(int nCh, int nRemotePort) { const string serverIpAddr = "127.0.0.1"; TcpClient tcpClient = null; NetworkStream stream = null; try { tcpClient = new TcpClient(serverIpAddr, nRemotePort); stream = tcpClient.GetStream(); System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 원격포트={1}에 접속 성공 ", nCh, nRemotePort); } catch (Exception e) { System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 원격포트={1}에 접속 실패 " + e.Message, nCh, nRemotePort); } int nChIndex = nCh - 1; //TCP 수신 스레드 Task.Run(() => { while (true) { //var from = new IPEndPoint(IPAddress.Any, 0);//패킷을 수신하면 보낸 놈의 IP, Port를 담을 객체 try { AUTHORITY_PACKET AuthPacket = new AUTHORITY_PACKET(); int bufferSize = Marshal.SizeOf(AuthPacket);//((PACKET_DATA)obj).TotalBytes; // 구조체에 할당된 메모리의 크기를 구한다. Byte[] recvBuffer = new Byte[bufferSize]; if (stream != null) { Console.WriteLine("채널={0} TCP 클라이언트 소켓 원격포트={1}으로부터 오는 패킷 대기중", nCh, nRemotePort); Int32 bytes = stream.Read(recvBuffer, 0, recvBuffer.Length); if (bytes == 0) { Thread.Sleep(1000); } //var recvBuffer = udpServer.Receive(ref from); //제어권 서버로부터 수신받은걸 저장한다. 제어권 클라이언트(릴레이 서버)로 보내기위해서 Console.WriteLine("From Port {0} Enqueue Received Packet", nRemotePort); queueSendToAuthorityClient[nChIndex].Enqueue(recvBuffer); string str = Encoding.UTF8.GetString(recvBuffer); Console.WriteLine("From Port {0} Received Length={1}byte", nRemotePort, str.Length); } else { Console.WriteLine("채널={0} TCP 클라이언트 소켓 원격 포트={1}의 스트림을 가져오지 못함.", nCh, nRemotePort); Thread.Sleep(5000); } } catch (Exception e) { //System.Console.WriteLine(e.Message); //접속종료?? System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 수신 스레드 Exception 원격 포트={1}" + e.Message, nCh, nRemotePort); Thread.Sleep(5000); } Thread.Sleep(1); } }); //TCP 송신스레드 //to AuthorityServer(제어권서버) Task.Run(() => { while (true) { if (queueSendToAuthorityServer[nChIndex].Count > 0) //에코모드 { Byte[] packet = queueSendToAuthorityServer[nChIndex].Dequeue(); //에코모드 try { //System.Console.WriteLine("TCP Send RemotePort={0}", arrAuthorityServerRemoteUdpPort[nChIndex]); stream.Write(packet, 0, packet.Length); System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 원격 포트={1}에 패킷 전송함", nCh, nRemotePort); } catch (Exception e) { //System.Console.WriteLine("TCP Send Exception RemotePort={0} " + e.Message, arrAuthorityServerRemoteUdpPort[nChIndex]); System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 송신 스레드 Exception 원격 포트={1}" + e.Message, nCh, nRemotePort); } Thread.Sleep(1); } Thread.Sleep(1); } }); //TCP 재 접속 스레드 Task.Run(() => { while (true) { Thread.Sleep(10000); bool bConnection = false; if (tcpClient == null) { bConnection = false; } else { if (tcpClient.Connected == false) { bConnection = false; } else { bConnection = true; } } if (bConnection == false) { //System.Console.WriteLine("채널={0} TCP 클라이언트 호스트와 연결 끊킴", nCh); try { tcpClient = new TcpClient(serverIpAddr, nRemotePort); stream = tcpClient.GetStream(); System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 재 접속 성공 원격 포트={1} ", nCh, nRemotePort); } catch (Exception e) { System.Console.WriteLine("채널={0} TCP 클라이언트 소켓 재 접속 실패 원격 포트={1} " + e.Message, nCh, nRemotePort); } } } }); }