Example #1
0
    void ServerWork()
    {
        //連接
        SocketConnet();
        //進入接收循環
        while (true)
        {
            //對data清零
            recvData = new byte[1024];
            try
            {
                //獲取收到的數據的長度
                recvLen = clientSocket.Receive(recvData);
            }
            catch (System.Net.Sockets.SocketException)
            {
                SocketConnet();
                continue;
            }
            //如果收到的數據長度為0,則重連並進入下一個循環
            if (recvLen == 0)
            {
                SocketConnet();
                continue;
            }
            //輸出接收到的數據
            recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);

            //N,n,n,n,n[/TCP]
            Debug.Log("Server Glass Rcv : " + recvStr);

            //Recieve Data Will Be   245,135,90[/TCP]   , str 不會包含[/TCP]
            char   delimiter    = ',';
            string delimiterEnd = "[/TCP]";

            //when data send quickly , server will recieve at least 2 [/TCP] , so message will be => 245,135,90[/TCP]125,15,190[/TCP]245,135,90[/TCP]
            //Split should remember that end is a part of substring , for above example , split number is 4  (3 + 1 end )
            string[] fragmentString = recvStr.Split(new[] { delimiterEnd }, System.StringSplitOptions.None);

            int fragmentNum = fragmentString.Length - 1;

            for (int fn = 0; fn < fragmentNum; fn++)
            {
                string[] substrings = fragmentString [fn].Split(delimiter);                  // => 245  135  90

                if (substrings.Length > 2)
                {
                    int DataNum = 0;
                    int.TryParse(substrings [0], out DataNum);

                    if (DataNum == 0 || substrings.Length < DataNum * 2 + 1)
                    {
                        continue;
                    }

                    ArgsPosition[] myArgs = new ArgsPosition[DataNum];
                    for (int i = 0; i < DataNum; i++)
                    {
                        myArgs [i]   = new ArgsPosition();
                        myArgs [i].x = System.Convert.ToInt32(substrings [1 + i * 2]);
                        myArgs [i].y = System.Convert.ToInt32(substrings [2 + i * 2]);
                    }

                    if (recieveGlassEvent != null)
                    {
                        recieveGlassEvent.Invoke(myArgs);
                    }
                }  // end Length
            }      // end fragment
        }          // end While
    }
Example #2
0
 public PositionTracking(ArgsPosition arg)
 {
     x           = arg.x;
     y           = arg.y;
     fitDistance = float.MaxValue;
 }
Example #3
0
    void ServerWork()
    {
        //連接
        SocketConnet();
        //進入接收循環
        while (true)
        {
            //對data清零
            recvData = new byte[1024];
            try
            {
                //獲取收到的數據的長度
                recvLen = clientSocket.Receive(recvData);
            }
            catch (System.Net.Sockets.SocketException)
            {
                SocketConnet();
                continue;
            }
            //如果收到的數據長度為0,則重連並進入下一個循環
            if (recvLen == 0)
            {
                SocketConnet();
                continue;
            }
            //輸出接收到的數據
            recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);

            //N,n,n,n,n[/TCP]
            Debug.Log(recvStr);

            //Recieve Data Will Be   245,135,90[/TCP]   , str 不會包含[/TCP]
            char     delimiter    = ',';
            char     delimiterEnd = '[';
            string[] clearString  = recvStr.Split(delimiterEnd);              // => 245,135,90
            string[] substrings   = clearString [0].Split(delimiter);         // => 245  135  90

            if (substrings.Length > 3)
            {
                Debug.Log("N:" + substrings [0] + " || (" + substrings [1] + " , " + substrings [2] + "," + substrings [3] + ")");

                int DataNum = 0;
                int.TryParse(substrings [0], out DataNum);

                //Debug.Log (DataNum);

                if (DataNum == 0 || substrings.Length < DataNum * 3 + 1)
                {
                    continue;
                }

                ArgsPosition[] myArgs = new ArgsPosition[DataNum];
                for (int i = 0; i < DataNum; i++)
                {
                    myArgs [i]   = new ArgsPosition();
                    myArgs [i].x = System.Convert.ToInt32(substrings [1 + i * 3]);
                    myArgs [i].y = System.Convert.ToInt32(substrings [2 + i * 3]);
                    myArgs [i].z = System.Convert.ToInt32(substrings [3 + i * 3]);
                }

                //Debug.Log ("Start Position Invoke");
                if (recievePositionEvent != null)
                {
                    recievePositionEvent.Invoke(myArgs);
                }
            }      // end Length
        }          // end While
    }
Example #4
0
    //Glass Client just need to Receive Touch data from Server
    public void readSocket()
    {
        while (true)
        {
            Thread.Sleep(20);

            if (socket_ready)
            {
                Byte[] data         = new Byte[256];
                String responseData = String.Empty;
                Int32  bytes        = 0;

                try
                {
                    // *** networkStream.Read will let programe get Stuck ***
                    bytes = net_stream.Read(data, 0, data.Length);
                } catch (System.IO.IOException)
                {
                    print("Disconnect Exception");
                    turnOnSender = true;
                    closeSocket();
                    break;
                }
                if (bytes == 0)
                {
                    print("Disconnect Action");
                    turnOnSender = true;
                    closeSocket();
                    break;
                }

                responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes);
                DebugSystem.current.threadWorkStores += delegate {
                    DebugSystem.current.ShowMessage(responseData);
                };

                //Recieve Data Will Be   245,135,90[/TCP]   , str 不會包含[/TCP]
                char     delimiter    = ',';
                char     delimiterEnd = '[';
                string[] clearString  = responseData.Split(delimiterEnd);                // => 245,135,90
                string[] substrings   = clearString [0].Split(delimiter);                // => 245  135  90

                // rs,x,y
                if (substrings [0] == "rs" && substrings.Length >= 3)
                {
                    int w = 0;
                    int h = 0;
                    int.TryParse(substrings [1], out w);
                    int.TryParse(substrings [2], out h);
                    if (recieveResolution != null)
                    {
                        recieveResolution(w, h);
                    }
                }

                // pt,n,x,y,z
                else if (substrings [0] == "pt" && substrings.Length >= 5)
                {
                    int DataNum = 0;
                    int.TryParse(substrings [1], out DataNum);

                    if (DataNum == 0 || substrings.Length < DataNum * 3 + 2)
                    {
                        continue;
                    }

                    ArgsPosition[] myArgs = new ArgsPosition[DataNum];
                    for (int i = 0; i < DataNum; i++)
                    {
                        int _x = 0;
                        int _y = 0;
                        int _z = 0;

                        int.TryParse(substrings [i * 3 + 2], out _x);
                        int.TryParse(substrings [i * 3 + 3], out _y);
                        int.TryParse(substrings [i * 3 + 4], out _z);

                        myArgs [i] = new ArgsPosition {
                            x = _x, y = _y, z = _z
                        };
                    }
                    if (recievePositionEvent != null)
                    {
                        recievePositionEvent.Invoke(myArgs);
                    }
                }

                else if (substrings.Length > 2)
                {
                    int DataNum = 0;
                    int.TryParse(substrings [0], out DataNum);

                    Debug.Log("Data Number : " + DataNum);

                    if (DataNum == 0 || substrings.Length < DataNum * 2 + 1)
                    {
                        continue;
                    }

                    ArgsPosition[] myArgs = new ArgsPosition[DataNum];
                    for (int i = 0; i < DataNum; i++)
                    {
                        myArgs [i]   = new ArgsPosition();
                        myArgs [i].x = System.Convert.ToInt32(substrings [1 + i * 2]);
                        myArgs [i].y = System.Convert.ToInt32(substrings [2 + i * 2]);
                    }

                    if (recieveTouchEvent != null)
                    {
                        recieveTouchEvent.Invoke(myArgs);
                    }
                }                 // end Length
            }
        }
    }