void FixedUpdate() { if (!socketStarted && targetIPReady) { socketStarted = true; doSocketSetup(); } if (outputText != null) { outputText.text = currentOutput; } if (!outgoingQueue.IsEmpty) { messagePackage mp = null; outgoingQueue.TryDequeue(out mp); if (mp != null) { sendOutgoingPacket(mp); textOut("Packet Sent."); } } if (!incomingLineRenderers.IsEmpty) { lrStruct l = new lrStruct(); if (incomingLineRenderers.TryDequeue(out l)) { GameObject go = new GameObject(); go.transform.parent = this.gameObject.transform; LineRenderer lr = go.gameObject.AddComponent <LineRenderer>(); lr.material = new Material(LineRendererDefaultMaterial);//copy lr.material.color = new Color(l.r, l.g, l.b, l.a); lr.startWidth = l.sw; lr.endWidth = l.ew; lr.endColor = lr.startColor = new Color(l.r, l.g, l.b, l.a); /* some helpful notes * LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>(); * lineRenderer.material = new Material(Shader.Find("Sprites/Default")); * lineRenderer.widthMultiplier = 0.2f; * lineRenderer.positionCount = lengthOfLineRenderer; * * // A simple 2 color gradient with a fixed alpha of 1.0f. * float alpha = 1.0f; * Gradient gradient = new Gradient(); * gradient.SetKeys( * new GradientColorKey[] { new GradientColorKey(c1, 0.0f), new GradientColorKey(c2, 1.0f) }, * new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } * ); * lineRenderer.colorGradient = gradient; */ } } //SendHeadsetLocation(); }
void FixedUpdate() { // Task t = HandleSocket(); // while(!t.IsCompleted) //{ // // } if (!socketStarted && targetIPReady) { socketStarted = true; setupSocket(); } if (!outgoingQueue.IsEmpty) { messagePackage mp = null; outgoingQueue.TryDequeue(out mp); if (mp != null) { sendOutgoingPacket(mp); } } if (!incomingLineRenderers.IsEmpty) { lrStruct l = new lrStruct(); if (incomingLineRenderers.TryDequeue(out l)) { LineRenderer lr = this.gameObject.AddComponent <LineRenderer>(); lr.material = new Material(LineRendererDefaultMaterial);//copy lr.material.color = new Color(l.r, l.g, l.b, l.a); lr.startWidth = l.sw; lr.endWidth = l.ew; lr.endColor = lr.startColor = new Color(l.r, l.g, l.b, l.a); } } //SendHeadsetLocation(); }
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 }
void FixedUpdate() { if (Camera.main != null) { headsetLocation = Camera.main.transform.position; headsetRotation = Camera.main.transform.rotation; if (lastCamPosSendTime + 0.5f < Time.realtimeSinceStartup) { SendHeadsetLocation(); lastCamPosSendTime = Time.realtimeSinceStartup; } } if (!socketStarted && targetIPReady) { socketStarted = true; doSocketSetup(); } if (doReconnect) { doReconnect = false; socketStarted = false; connected = false; doSocketSetup(); } if (!outgoingQueue.IsEmpty) { messagePackage mp = null; outgoingQueue.TryDequeue(out mp); if (mp != null) { sendOutgoingPacket(mp); } } if (undoLineRenderer) { undoLineRenderer = false; try { LineRenderer lr = lineRenderers.Pop(); lr.enabled = false; Destroy(lr.gameObject); } catch (Exception e) { } } if (!incomingLineRenderers.IsEmpty) { lrStruct l = new lrStruct(); if (incomingLineRenderers.TryDequeue(out l)) { if (l == null) { return; } GameObject go = new GameObject(); go.transform.parent = this.gameObject.transform; LineRenderer lr = go.AddComponent <LineRenderer>(); lr.material = new Material(LineRendererDefaultMaterial);//copy lr.material.color = new Color(l.r, l.g, l.b, l.a); lr.startWidth = l.sw; lr.endWidth = l.ew; lr.widthMultiplier = 1.0f; lr.endColor = lr.startColor = new Color(l.r, l.g, l.b, l.a); lr.SetVertexCount(l.verts.Length); //lr.positionCount = l.verts.Length; for (int i = 0; i < l.verts.Length; i++) { lr.SetPosition(i, l.verts[i]); } go.active = true; Gradient gradient = new Gradient(); gradient.SetKeys( new GradientColorKey[] { new GradientColorKey(lr.material.color, 0.0f), new GradientColorKey(lr.material.color, 1.0f) }, new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) } ); lr.colorGradient = gradient; lineRenderers.Push(lr); /* some helpful notes * LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>(); * lineRenderer.material = new Material(Shader.Find("Sprites/Default")); * lineRenderer.widthMultiplier = 0.2f; * lineRenderer.positionCount = lengthOfLineRenderer; * * // A simple 2 color gradient with a fixed alpha of 1.0f. * float alpha = 1.0f; * Gradient gradient = new Gradient(); * gradient.SetKeys( * new GradientColorKey[] { new GradientColorKey(c1, 0.0f), new GradientColorKey(c2, 1.0f) }, * new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } * ); * lineRenderer.colorGradient = gradient; */ } } //SendHeadsetLocation(); }
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 }
/* #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"); }