public unsafe void ProccessRecv(byte[] recvBuffer) { string debugLine = "[" + this.tcpClient.Client.RemoteEndPoint.ToString() + "] : "; switch ((int)recvBuffer[0]) { case 1: IF_SC100 if_sc100 = (IF_SC100)ByteArrayToStructure(recvBuffer, typeof(IF_SC100)); string ipStr = new string(if_sc100.IP); string timeStr = new string(if_sc100.time); debugLine += ipStr + " " + if_sc100.latitude + " " + if_sc100.longitude + " " + if_sc100.objType + " " + timeStr + " " + if_sc100.objX1 + " " + if_sc100.objY1 + " " + if_sc100.objX2 + " " + if_sc100.objY2 + "\n"; break; case 2: IF_SC200 if_sc200 = (IF_SC200)ByteArrayToStructure(recvBuffer, typeof(IF_SC200)); debugLine += "\n"; break; case 3: IF_SC300 if_sc300 = (IF_SC300)ByteArrayToStructure(recvBuffer, typeof(IF_SC300)); debugLine += "\n"; break; default: Debug.Log("recv wrong data " + recvBuffer[0]); break; } logText.text += debugLine; scrollRect.verticalNormalizedPosition = 0.0f; Debug.Log(debugLine); }
private static byte[] StructureToByteArray(IF_SC200 if_sc200) { byte[] bb = new byte[Marshal.SizeOf(if_sc200)]; GCHandle gch = GCHandle.Alloc(bb, GCHandleType.Pinned); Marshal.StructureToPtr(if_sc200, gch.AddrOfPinnedObject(), false); gch.Free(); return(bb); }