/*----------------------------------------------------------------------------------------- * * Client-server stuff : * * -----------------------------------------------------------------------------------------*/ /// <summary> /// /// </summary> /// <param name="message"></param> void DispatchIM(GameTime gameTime, NetServer server) { NetIncomingMessage msg; while ((msg = server.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.VerboseDebugMessage: Log.Debug("SV Net: " + msg.ReadString()); break; case NetIncomingMessageType.DebugMessage: Log.Verbose("SV Net: " + msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: Log.Warning("SV Net: " + msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Log.Error("SV Net: " + msg.ReadString()); break; case NetIncomingMessageType.ConnectionLatencyUpdated: if (game.Network.ShowLatency) { float latency = msg.ReadFloat(); Log.Verbose("...SV ping - {0} {1,6:0.00} ms", msg.SenderEndPoint, (latency * 1000)); } break; case NetIncomingMessageType.DiscoveryRequest: Log.Message("Discovery request from {0}", msg.SenderEndPoint.ToString()); var response = server.CreateMessage(serverInstance.ServerInfo()); server.SendDiscoveryResponse(response, msg.SenderEndPoint); break; case NetIncomingMessageType.ConnectionApproval: var userGuid = msg.SenderConnection.PeekHailGuid(); var userInfo = msg.SenderConnection.PeekHailUserInfo(); var reason = ""; var approve = serverInstance.ApproveClient(userGuid, userInfo, out reason); if (approve) { msg.SenderConnection.Approve(server.CreateMessage(serverInstance.ServerInfo())); } else { msg.SenderConnection.Deny(reason); } break; case NetIncomingMessageType.StatusChanged: DispatchStatusChange(msg); break; case NetIncomingMessageType.Data: DispatchDataIM(gameTime, msg); break; default: Log.Warning("SV: Unhandled type: " + msg.MessageType); break; } server.Recycle(msg); } }