Exemple #1
0
        /*-----------------------------------------------------------------------------------------
        *
        *	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);
            }
        }