Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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
        }
Ejemplo n.º 4
0
        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
        }
Ejemplo n.º 5
0
        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());
            }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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);
                        }
                    }
                }
            });
        }