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 }
public PositionTracking(ArgsPosition arg) { x = arg.x; y = arg.y; fitDistance = float.MaxValue; }
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 }
//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 } } }