Ejemplo n.º 1
0
 public bool Listen(int port, int maxConnections, INetDriverCallbacks callbacks)
 {
     Assert.IsNull(clientSend);
     Assert.IsNull(serverSend);
     serverSend = new LocalGameNetDriverConnection(this, callbacks);
     return(true);
 }
Ejemplo n.º 2
0
    public void TickClient(float dt, byte[] recvBuffer, ref NetIOMetrics reliableChannelMetrics, ref NetIOMetrics unreliableChannelMetrics)
    {
        Perf.Begin("LocalGameNetDriver.TickClient");
        if (clientSend != null)
        {
            if (clientSend.connectPending)
            {
                clientSend.connectPending = false;
                clientSend.callbacks.OnConnect(clientSend);
            }

            if ((clientSend != null) && (serverSendOfs > 0))
            {
                RecvMessages(serverSendBuffer, serverSendOfs, recvBuffer, clientSend, ref reliableChannelMetrics, ref unreliableChannelMetrics);
                serverSendOfs = 0;
            }

            if ((clientSend != null) && clientSend.disconnectPending)
            {
                clientSend.Dispose();
                clientSend = null;
            }
        }
        Perf.End();
    }
Ejemplo n.º 3
0
 public bool Connect(string address, int port, INetDriverCallbacks callbacks)
 {
     Assert.IsNotNull(serverSend);
     Assert.IsNull(clientSend);
     clientSend = new LocalGameNetDriverConnection(this, callbacks);
     serverSend.connectPending = true;
     return(true);
 }
Ejemplo n.º 4
0
 public void Dispose()
 {
     if (clientSend != null)
     {
         clientSend.Dispose();
         clientSend = null;
     }
     if (serverSend != null)
     {
         serverSend.Dispose();
         serverSend = null;
     }
 }
Ejemplo n.º 5
0
 internal void SendReliable(LocalGameNetDriverConnection conn, byte[] buffer, int numBytes)
 {
     Perf.Begin("LocalGameNetDriver.SendReliable");
     if (conn == serverSend)
     {
         WriteMessage(buffer, numBytes, serverSendBuffer, ref serverSendOfs);
     }
     else
     {
         Assert.IsNotNull(clientSend);
         WriteMessage(buffer, numBytes, clientSendBuffer, ref clientSendOfs);
     }
     Perf.End();
 }
Ejemplo n.º 6
0
 internal void Disconnect(LocalGameNetDriverConnection conn)
 {
     if (conn == serverSend)
     {
         serverSend = null;
         if (clientSend != null)
         {
             clientSend.disconnectPending = true;
         }
     }
     else if (conn == clientSend)
     {
         clientSend = null;
         if (serverSend != null)
         {
             serverSend.disconnectPending = true;
         }
     }
 }
Ejemplo n.º 7
0
    void RecvMessages(byte[] src, int srcLen, byte[] dst, LocalGameNetDriverConnection conn, ref NetIOMetrics reliableChannelMetrics, ref NetIOMetrics unreliableChannelMetrics)
    {
        Perf.Begin("LocalGameNetDriver.RecvMessages");

        for (int i = 0; i < srcLen - 4;)
        {
            if (!conn.isValid)
            {
                break;
            }

            int msgLen = System.BitConverter.ToInt32(src, i);
            i += 4;

            Assert.IsTrue(msgLen > 0);

            if (msgLen > 0)
            {
                System.Array.Copy(src, i, dst, 0, msgLen);
                try {
                    Perf.Begin("LocalGameNetDriver.RecvMessages.Callbacks.OnMessageReceived");
                    conn.callbacks.OnMessageReceived(conn, dst, msgLen);
                    Perf.End();
                } catch (System.Exception e) {
                    Debug.LogException(e);
                }
            }
            else
            {
                conn.callbacks.OnInvalidMessageReceived(conn);
            }

            i += msgLen;             // increment before callback in-case there is an exception

            reliableChannelMetrics.bytesRecv += msgLen;
            ++reliableChannelMetrics.numPacketsRecv;
        }

        Perf.End();
    }
Ejemplo n.º 8
0
 internal void SendUnreliable(LocalGameNetDriverConnection conn, byte[] buffer, int numBytes)
 {
     SendReliable(conn, buffer, numBytes);
 }