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
    }
Esempio n. 3
0
    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");
    }