public bool Listen(int port, int maxConnections, INetDriverCallbacks callbacks) { Assert.IsNull(clientSend); Assert.IsNull(serverSend); serverSend = new LocalGameNetDriverConnection(this, callbacks); return(true); }
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(); }
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); }
public void Dispose() { if (clientSend != null) { clientSend.Dispose(); clientSend = null; } if (serverSend != null) { serverSend.Dispose(); serverSend = null; } }
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(); }
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; } } }
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(); }
internal void SendUnreliable(LocalGameNetDriverConnection conn, byte[] buffer, int numBytes) { SendReliable(conn, buffer, numBytes); }