public override void Update(float deltaTime) { if (!started) { return; } if (OnOwnerDetermined != null && OwnerConnection != null) { OnOwnerDetermined?.Invoke(OwnerConnection); OnOwnerDetermined = null; } //backwards for loop so we can remove elements while iterating for (int i = connectedClients.Count - 1; i >= 0; i--) { SteamP2PConnection conn = connectedClients[i] as SteamP2PConnection; conn.Decay(deltaTime); if (conn.Timeout < 0.0) { Disconnect(conn, "Timed out"); } } try { while (ChildServerRelay.Read(out byte[] incBuf)) { IReadMessage inc = new ReadOnlyMessage(incBuf, false, 0, incBuf.Length, OwnerConnection); HandleDataMessage(inc); } } catch (Exception e) { string errorMsg = "Server failed to read an incoming message. {" + e + "}\n" + e.StackTrace; GameAnalyticsManager.AddErrorEventOnce("SteamP2PServerPeer.Update:ClientReadException" + e.TargetSite.ToString(), GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); #if DEBUG DebugConsole.ThrowError(errorMsg); #else if (GameSettings.VerboseLogging) { DebugConsole.ThrowError(errorMsg); } #endif } for (int i = 0; i < pendingClients.Count; i++) { PendingClient pendingClient = pendingClients[i]; UpdatePendingClient(pendingClient); if (i >= pendingClients.Count || pendingClients[i] != pendingClient) { i--; } } }
public override void Update(float deltaTime) { if (netServer == null) { return; } if (OnOwnerDetermined != null && OwnerConnection != null) { OnOwnerDetermined?.Invoke(OwnerConnection); OnOwnerDetermined = null; } netServer.ReadMessages(incomingLidgrenMessages); //backwards for loop so we can remove elements while iterating for (int i = connectedClients.Count - 1; i >= 0; i--) { connectedClients[i].Decay(deltaTime); if (connectedClients[i].Timeout < 0.0) { Disconnect(connectedClients[i], "Timed out"); } } //process incoming connections first foreach (NetIncomingMessage inc in incomingLidgrenMessages.Where(m => m.MessageType == NetIncomingMessageType.ConnectionApproval)) { HandleConnection(inc); } try { //after processing connections, go ahead with the rest of the messages foreach (NetIncomingMessage inc in incomingLidgrenMessages.Where(m => m.MessageType != NetIncomingMessageType.ConnectionApproval)) { switch (inc.MessageType) { case NetIncomingMessageType.Data: HandleDataMessage(inc); break; case NetIncomingMessageType.StatusChanged: HandleStatusChanged(inc); break; } } } catch (Exception e) { string errorMsg = "Server failed to read an incoming message. {" + e + "}\n" + e.StackTrace; GameAnalyticsManager.AddErrorEventOnce("SteamP2PServerPeer.Update:ClientReadException" + e.TargetSite.ToString(), GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); #if DEBUG DebugConsole.ThrowError(errorMsg); #else if (GameSettings.VerboseLogging) { DebugConsole.ThrowError(errorMsg); } #endif } for (int i = 0; i < pendingClients.Count; i++) { PendingClient pendingClient = pendingClients[i]; UpdatePendingClient(pendingClient); if (i >= pendingClients.Count || pendingClients[i] != pendingClient) { i--; } } incomingLidgrenMessages.Clear(); }
public override void Update(float deltaTime) { if (netServer == null) { return; } if (OnOwnerDetermined != null && OwnerConnection != null) { OnOwnerDetermined?.Invoke(OwnerConnection); OnOwnerDetermined = null; } netServer.ReadMessages(incomingLidgrenMessages); //process incoming connections first foreach (NetIncomingMessage inc in incomingLidgrenMessages.Where(m => m.MessageType == NetIncomingMessageType.ConnectionApproval)) { HandleConnection(inc); } try { //after processing connections, go ahead with the rest of the messages foreach (NetIncomingMessage inc in incomingLidgrenMessages.Where(m => m.MessageType != NetIncomingMessageType.ConnectionApproval)) { switch (inc.MessageType) { case NetIncomingMessageType.Data: HandleDataMessage(inc); break; case NetIncomingMessageType.StatusChanged: HandleStatusChanged(inc); break; } } } catch (Exception e) { string errorMsg = "Server failed to read an incoming message. {" + e + "}\n" + e.StackTrace.CleanupStackTrace(); GameAnalyticsManager.AddErrorEventOnce("LidgrenServerPeer.Update:ClientReadException" + e.TargetSite.ToString(), GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); #if DEBUG DebugConsole.ThrowError(errorMsg); #else if (GameSettings.VerboseLogging) { DebugConsole.ThrowError(errorMsg); } #endif } for (int i = 0; i < pendingClients.Count; i++) { PendingClient pendingClient = pendingClients[i]; var connection = pendingClient.Connection as LidgrenConnection; if (connection.NetConnection.Status == NetConnectionStatus.InitiatedConnect || connection.NetConnection.Status == NetConnectionStatus.ReceivedInitiation || connection.NetConnection.Status == NetConnectionStatus.RespondedAwaitingApproval || connection.NetConnection.Status == NetConnectionStatus.RespondedConnect) { continue; } UpdatePendingClient(pendingClient); if (i >= pendingClients.Count || pendingClients[i] != pendingClient) { i--; } } incomingLidgrenMessages.Clear(); }