Beispiel #1
0
 private void ConnectCallback(IAsyncResult ar)
 {
     if (connectCallback != null)
     {
         connectCallback(this);
     }
     try
     {
         IsConnected = client.Connected;
         var stream = client.GetStream();
         stream.BeginRead(readBuffer, 0, READ_BUFFER_SIZE, Read, null);
     }
     catch (Exception ex)
     {
         if (connectCallback != null)
         {
             connectCallback(false);
         }
         Debug.LogException(ex);
     }
 }
    public async Task InitSocket(string ipAddress)
    {
    #if !UNITY_EDITOR
        socket = new StreamSocket();
        await socket.ConnectAsync(new HostName(ipAddress), "4269");

        reader = new BinaryReader(socket.InputStream.AsStreamForRead());
        writer = new BinaryWriter(socket.OutputStream.AsStreamForWrite());
                #else
        socket = new TcpClient();
        await socket.ConnectAsync(ipAddress, 4269);

        reader = new BinaryReader(socket.GetStream());
        writer = new BinaryWriter(socket.GetStream());
    #endif
        running     = true;
        IsConnected = true;
        writer.Write(20); // We request 20 fps here
        writer.Flush();

        StartReceivingThread();
    }
Beispiel #3
0
        private void ConnectCallback(IAsyncResult result)
#endif
        {
            //We can get here is the connection fails and the monotor thread
            // calls close. We should just do nothing at this point
#if __WINDOWS__
            if (client == null || !connected)
            {
                return;
            }

            if (stopped)
            {
                if (connected)
                {
                    client.Dispose();
                }
                return;
            }
#else
            if ((client != null && !client.Connected))
            {
                return;
            }

            if (stopped)
            {
                if (client.Connected)
                {
                    client.Close();
                }
                return;
            }

            clientStream = GSTlsClient.WrapStream(client.GetStream(), remotehost);
#endif

            //Each time a tcp connection is established we re-authenticate
            try {
                LoginCommand loginCmd = new LoginCommand(session.ConnectToken);

                Send(loginCmd);

                Packet p = PooledObjects.PacketPool.Pop();

                PositionStream rss = PooledObjects.PositionStreamPool.Pop();
#if __WINDOWS__
                rss.Wrap(client.InputStream.AsStreamForRead());
#else
                rss.Wrap(clientStream);
#endif

                int bytesRead = 0;

                while ((bytesRead = read(rss, p)) != 0)
                {
                    OnPacketReceived(p, bytesRead);
                    PooledObjects.PacketPool.Push(p);
                    p = PooledObjects.PacketPool.Pop();
                }

                PooledObjects.PacketPool.Push(p);
                PooledObjects.PositionStreamPool.Push(rss);
            }
#if __WINDOWS__
            /*catch (AggregateException exception)
             * {
             *  foreach (Exception ex in exception.InnerExceptions)
             *  {
             *      System.Diagnostics.Debug.WriteLine(ex);
             *  }
             * }*/
#endif
            catch (Exception e)
            {
                if (session != null && !stopped)
                {
                    session.ConnectState = GameSparksRT.ConnectState.Disconnected;
                    session.Log("ReliableConnection", GameSparksRT.LogLevel.DEBUG, e.Message);
                    try{
                        session.OnReady(false);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex);
                    }
                }
            }
        }