/// <summary>
        /// Avoir des enum permet de connaitre le template d'envoie de message et d eviter de faire de la reflection ou d'utiliser le mot clef dynamic qui sont gourmand
        /// </summary>
        /// <param name="typeMessage"></param>
        /// <param name="values"></param>
        public void CreateMessage(EnumMessageFromServer typeMessage, List <object> values, IPEndPoint listener)
        {
            NetOutgoingMessage message = _serveur.CreateMessage();

            switch (typeMessage)
            {
            case EnumMessageFromServer.Init:
                message.Write((byte)values[0]);     // EnumTypeElement type perso choisi
                message.Write((string)values[1]);   // String pseudo
                break;

            case EnumMessageFromServer.Update:
                message.Write((byte)values[0]);     // EnumMoveCommand command de deplacement
                message.Write((byte)values[1]);     // EnumActionCommand command d'actions
                break;
            }
        }
示例#2
0
        public void Update(GameTime gameTime)
        {
            NetIncomingMessage message;

            while ((message = _client.ReadMessage()) != null)
            {
                switch (message.MessageType)
                {
                case NetIncomingMessageType.Data:
                    EnumMessageFromServer typeMessage = (EnumMessageFromServer)message.ReadByte();
                    switch (typeMessage)
                    {
                    case EnumMessageFromServer.Init:
                        _ipEndPoint = message.SenderEndPoint;
                        uint nbElements = message.ReadUInt16();
                        for (int i = 0; i < nbElements; i++)
                        {
                            EnumTypeElement elementType = (EnumTypeElement)message.ReadByte();
                            switch (elementType)
                            {
                            case EnumTypeElement.Loup:
                                break;

                            case EnumTypeElement.Guerrier:
                                break;
                            }
                        }
                        break;

                    case EnumMessageFromServer.Update:
                        int ID            = message.ReadUInt16();
                        var NetworkObject = _networkObjects.FirstOrDefault(p => p != null && p.id == ID);
                        if (NetworkObject != null)
                        {
                            NetworkObject.Synchronise(message);
                        }
                        break;
                    }
                    break;

                case NetIncomingMessageType.StatusChanged:
                    switch (message.SenderConnection.Status)
                    {
                    case NetConnectionStatus.None:
                        break;

                    case NetConnectionStatus.InitiatedConnect:
                        break;

                    case NetConnectionStatus.ReceivedInitiation:
                        break;

                    case NetConnectionStatus.RespondedAwaitingApproval:
                        break;

                    case NetConnectionStatus.RespondedConnect:
                        break;

                    case NetConnectionStatus.Connected:
                        break;

                    case NetConnectionStatus.Disconnecting:
                        break;

                    case NetConnectionStatus.Disconnected:
                        break;

                    default:
                        break;
                    }
                    break;

                case NetIncomingMessageType.DebugMessage:
                    Console.WriteLine(message.ReadString());
                    break;

                default:
                    Console.WriteLine("unhandled message with type: "
                                      + message.MessageType);
                    break;
                }

                _client.Recycle(message);
            }

            foreach (var NetworkObject in _networkObjects)
            {
                NetworkObject.Update(gameTime);
            }
        }