public async void setupSocket() { #if !UNITY_EDITOR //udpClient = new DatagramSocket(); //udpClient.Control.DontFragment = true; tcpClient = new Windows.Networking.Sockets.StreamSocket(); tcpClient.Control.OutboundBufferSizeInBytes = 128000; tcpClient.Control.NoDelay = false; try { //await udpClient.BindServiceNameAsync("" + targetPort); await tcpClient.ConnectAsync(new HostName(targetIP), "" + targetPort); outputStream = tcpClient.OutputStream; connected = true; //outputStream = await udpClient.GetOutputStreamAsync(new HostName(targetIP), "" + targetPort); } catch (Exception e) { Debug.Log(e.ToString()); return; } #endif }
public async Task setupSocket() { #if !UNITY_EDITOR tcpClient = new Windows.Networking.Sockets.StreamSocket(); tcpClient.Control.NoDelay = false; tcpClient.Control.KeepAlive = false; tcpClient.Control.OutboundBufferSizeInBytes = 1500; while (!connected) { try { textOut("Connecting to " + targetIP + " " + targetPort); await tcpClient.ConnectAsync(new HostName(targetIP), "" + targetPort); textOut("Connected!"); outputStream = tcpClient.OutputStream; inputStream = tcpClient.InputStream; writer = new DataWriter(outputStream); reader = new DataReader(inputStream); reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; reader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian; reader.InputStreamOptions = InputStreamOptions.Partial; connected = true; while (connected) { await reader.LoadAsync(8192); if (reader.UnconsumedBufferLength > 4) { textOut("Reading...."); int incomingSize = reader.ReadInt32(); if (incomingSize > 0 && incomingSize < 100000) { //await reader.LoadAsync((uint)incomingSize);//preloads the buffer with the data which makes the following not needed. while (reader.UnconsumedBufferLength < incomingSize) { System.Threading.Tasks.Task.Delay(100).Wait(); await reader.LoadAsync(8192); } textOut("Getting new Line!"); int packetType = reader.ReadInt32(); float r = reader.ReadSingle(); float g = reader.ReadSingle(); float b = reader.ReadSingle(); float a = reader.ReadSingle(); int count = reader.ReadInt32();// this is actually just for padding... float sw = reader.ReadSingle(); float ew = reader.ReadSingle(); byte[] packet = new byte[incomingSize - 36]; //reader.ReadBytes(packet); if (packetType == 4 && packet.Length > 0) { lrStruct l = new lrStruct { r = r, g = g, b = b, a = a, pc = count, sw = sw, ew = ew, verts = new Vector3[count] }; textOut("" + count + " " + r + " " + g + " " + b + " " + a + " " + sw + " " + ew + "\n" + "Count Suggested Bytes:" + (count * 4 * 3) + " Preloaded Package Size:" + packet.Length); for (int i = 0; i < count; i++)//Dan Simplified this. Probably not bugged. { l.verts[i] = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } incomingLineRenderers.Enqueue(l); textOut("Line Renderer Enqueued"); } if (packetType == 5) { undoLineRenderer = true; } } else { //TODO Handle it. } } } //outputStream = await udpClient.GetOutputStreamAsync(new HostName(targetIP), "" + targetPort); } catch (Exception e) { Debug.LogError(e.ToString()); connected = false; socketStarted = false; return; } } #endif }
public async void setupSocket() { #if !UNITY_EDITOR tcpClient = new Windows.Networking.Sockets.StreamSocket(); tcpClient.Control.NoDelay = false; tcpClient.Control.KeepAlive = false; tcpClient.Control.OutboundBufferSizeInBytes = 1500; while (!connected) { try { await tcpClient.ConnectAsync(new HostName(targetIP), "" + targetPort); outputStream = tcpClient.OutputStream; inputStream = tcpClient.InputStream; writer = new DataWriter(outputStream); reader = new DataReader(inputStream); reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; reader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian; reader.InputStreamOptions = InputStreamOptions.Partial; connected = true; while (connected) { await reader.LoadAsync(8192); if (reader.UnconsumedBufferLength > 4) { int incomingSize = reader.ReadInt32(); if (incomingSize > 0 && incomingSize < 100000) { while (reader.UnconsumedBufferLength < incomingSize) { System.Threading.Tasks.Task.Delay(100).Wait(); await reader.LoadAsync(8192); } int packetType = reader.ReadInt32(); float r = reader.ReadSingle(); float g = reader.ReadSingle(); float b = reader.ReadSingle(); float a = reader.ReadSingle(); int count = reader.ReadInt32(); float sw = reader.ReadSingle(); float ew = reader.ReadSingle(); byte[] packet = new byte[incomingSize - 36];// this differs from spatialmapvuforia if (packetType == 4 && packet.Length > 0) { lrStruct l = new lrStruct { r = r, g = g, b = b, a = a, pc = count, sw = sw, ew = ew, verts = new Vector3[count] }; for (int i = 0; i < count; i++)//Dan Simplified this. Probably not bugged. { l.verts[i] = new Vector3(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } incomingLineRenderers.Enqueue(l); } if (packetType == 5) { undoLineRenderer = true; } } else { //TODO Handle it. } } } } catch (Exception e) { Debug.LogError(e.ToString()); connected = false; socketStarted = false; doReconnect = true; return; } } doReconnect = true; #endif }
public async Task setupSocket() { //udpClient = new DatagramSocket(); //udpClient.Control.DontFragment = true; tcpClient = new Windows.Networking.Sockets.StreamSocket(); //tcpClient.Control.OutboundBufferSizeInBytes = 1500; tcpClient.Control.NoDelay = false; tcpClient.Control.KeepAlive = false; tcpClient.Control.OutboundBufferSizeInBytes = 1500; while (!connected) { try { //await udpClient.BindServiceNameAsync("" + targetPort); await tcpClient.ConnectAsync(new HostName(targetIP), "" + targetPort); outputStream = tcpClient.OutputStream; inputStream = tcpClient.InputStream; writer = new DataWriter(outputStream); reader = new DataReader(inputStream); reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; reader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian; reader.InputStreamOptions = InputStreamOptions.Partial; connected = true; //incomingBuffer = new byte[0]; /* * while (connected) * { * * if(reader.UnconsumedBufferLength>4) * { * * int incomingSize = reader.ReadInt32(); * if(incomingSize>0&&incomingSize < 100000) * { * await reader.LoadAsync((uint)incomingSize);//preloads the buffer with the data which makes the following not needed. * * * * int packetType = reader.ReadInt32(); * float r = reader.ReadSingle(); * float g = reader.ReadSingle(); * float b = reader.ReadSingle(); * float a = reader.ReadSingle(); * int count = reader.ReadInt32();// this is actually just for padding... * float sw = reader.ReadSingle(); * float ew = reader.ReadSingle(); * byte[] packet = new byte[incomingSize-32]; * reader.ReadBytes(packet); * if(packetType==4&&packet.Length>0) * { * lrStruct l = new lrStruct(); * l.r = r; * l.g = g; * l.b = b; * l.a = a; * l.pc = count; * l.sw = sw; * l.ew = ew; * l.verts = new Vector3[count]; * for(int i = 0; i < count; i++)//Dan actually wrote this one from scratch, so might be bugged. * { * l.verts[i]=new Vector3(BitConverter.ToSingle(packet, i*12+0), BitConverter.ToSingle(packet, i * 12 + 4), * BitConverter.ToSingle(packet, i * 12 + 8)); * } * incomingLineRenderers.Enqueue(l); * } * if (packetType == 5) * undoLineRenderer = true; * * * } * else * { * //TODO Handle it. * } * * } * * } */ } catch (Exception e) { Debug.Log(e.ToString()); return; } } }
/* #if !UNITY_EDITOR * public async Task HandleSocket() * { * * if(!socketStarted&&targetIPReady&&!connected&&!startConnect&&tcpClient==null) * { * tcpClient = new Windows.Networking.Sockets.StreamSocket(); * tcpClient.Control.NoDelay = false; * tcpClient.Control.KeepAlive = false; * tcpClient.Control.OutboundBufferSizeInBytes = 1500; * startConnect=true; * await tcpClient.ConnectAsync(new HostName(targetIP), "" + targetPort); * outputStream = tcpClient.OutputStream; * inputStream = tcpClient.InputStream; * writer = new DataWriter(outputStream); * reader = new DataReader(inputStream); * reader.InputStreamOptions = InputStreamOptions.Partial; * reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; * reader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian; * connected = true; * } * * if(connected&&reader.UnconsumedBufferLength>4) * { * lengthOfNextPacket=reader.ReadInt32(); * } * if(lengthOfNextPacket>0&&reader.UnconsumedBufferLength>lengthOfNextPacket) * { * int packetType = reader.ReadInt32(); * float r = reader.ReadSingle(); * float g = reader.ReadSingle(); * float b = reader.ReadSingle(); * float a = reader.ReadSingle(); * int count = reader.ReadInt32();// this is actually just for padding... * float sw = reader.ReadSingle(); * float ew = reader.ReadSingle(); * byte[] packet = new byte[lengthOfNextPacket-32]; * reader.ReadBytes(packet); * if(packetType==4&&packet.Length>0) * { * lrStruct l = new lrStruct(); * l.r = r; * l.g = g; * l.b = b; * l.a = a; * l.pc = count; * l.sw = sw; * l.ew = ew; * l.verts = new Vector3[count]; * for(int i = 0; i < count; i++)//Dan actually wrote this one from scratch, so might be bugged. * { * l.verts[i]=new Vector3(BitConverter.ToSingle(packet, i*12+0), BitConverter.ToSingle(packet, i * 12 + 4), * BitConverter.ToSingle(packet, i * 12 + 8)); * } * incomingLineRenderers.Enqueue(l); * } * if (packetType == 5) * undoLineRenderer = true; * lengthOfNextPacket=-1; * } * * * * * * } #endif */ #if !UNITY_EDITOR private async void _streamSocket_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) { using (IInputStream inStream = args.Socket.InputStream) { reader = new DataReader(inStream); reader.InputStreamOptions = InputStreamOptions.Partial; outputStream = args.Socket.OutputStream; inputStream = inStream; writer = new DataWriter(outputStream); connected = true; while (connected) { await reader.LoadAsync(8192); if (reader.UnconsumedBufferLength > 4) { int incomingSize = reader.ReadInt32(); if (incomingSize > 0 && incomingSize < 100000) { await reader.LoadAsync((uint)incomingSize); //preloads the buffer with the data which makes the following not needed. int packetType = reader.ReadInt32(); float r = reader.ReadSingle(); float g = reader.ReadSingle(); float b = reader.ReadSingle(); float a = reader.ReadSingle(); int count = reader.ReadInt32();// this is actually just for padding... float sw = reader.ReadSingle(); float ew = reader.ReadSingle(); byte[] packet = new byte[incomingSize - 32]; reader.ReadBytes(packet); if (packetType == 4 && packet.Length > 0) { lrStruct l = new lrStruct(); l.r = r; l.g = g; l.b = b; l.a = a; l.pc = count; l.sw = sw; l.ew = ew; l.verts = new Vector3[count]; for (int i = 0; i < count; i++) //Dan actually wrote this one from scratch, so might be bugged. { l.verts[i] = new Vector3(BitConverter.ToSingle(packet, i * 12 + 0), BitConverter.ToSingle(packet, i * 12 + 4), BitConverter.ToSingle(packet, i * 12 + 8)); } incomingLineRenderers.Enqueue(l); } if (packetType == 5) { undoLineRenderer = true; } } else { //TODO Handle it. } } } } System.Diagnostics.Debug.WriteLine("Finished reading"); }