Beispiel #1
0
        /// <summary>
        /// Class constructor.
        /// </summary>
        /// <param name="aPlayerModel">PlayerModel class stored in this class from ClientMain.</param>
        /// <param name="ServerIP">Server IP to connect on it.</param>
        /// <param name="ServerPort">Server port to connect on it.</param>
        public ClientNetwork(PlayerModel aPlayerModel, string ServerIP, int ServerPort)
        {
            this.m_netConfiguration = new NetPeerConfiguration("LOGMultiplayer");
            this.m_netClient        = new NetClient(m_netConfiguration);

            this.m_netClient.Start(); // Start netClient.

            this.m_playerModel = aPlayerModel;

            NetOutgoingMessage netOutgoingMessage = this.m_netClient.CreateMessage();

            IGameMessage gameMessage = new ConnectionApprovalRequestMessage
            {
                Version  = APIMain.Version,
                Username = this.m_playerModel.Username
            };

            netOutgoingMessage.Write((byte)gameMessage.MessageType);
            gameMessage.EncodeMessage(netOutgoingMessage);

            this.m_netClient.Connect(ServerIP, Convert.ToInt32(ServerPort), netOutgoingMessage);

            this.m_vesselManager = new VesselManager(this.m_netClient);
            this.m_playerModel.messageHandler.OnVesselUpdateState += this.m_vesselManager.HandleVesselMessage;
        }
Beispiel #2
0
        /// <summary>
        /// Class constructor.
        /// </summary>
        /// <param name="aPlayerModel">PlayerModel class stored in this class from ClientMain.</param>
        /// <param name="ServerIP">Server IP to connect on it.</param>
        /// <param name="ServerPort">Server port to connect on it.</param>
        public ClientNetwork(PlayerModel aPlayerModel, string ServerIP, int ServerPort)
        {
            this.m_netConfiguration = new NetPeerConfiguration("LOGMultiplayer");
            this.m_netClient = new NetClient(m_netConfiguration);

            this.m_netClient.Start(); // Start netClient.

            this.m_playerModel = aPlayerModel;

            NetOutgoingMessage netOutgoingMessage = this.m_netClient.CreateMessage();

            IGameMessage gameMessage = new ConnectionApprovalRequestMessage
            {
                Version = APIMain.Version,
                Username = this.m_playerModel.Username
            };

            netOutgoingMessage.Write((byte)gameMessage.MessageType);
            gameMessage.EncodeMessage(netOutgoingMessage);

            this.m_netClient.Connect(ServerIP, Convert.ToInt32(ServerPort), netOutgoingMessage);

            this.m_vesselManager = new VesselManager(this.m_netClient);
            this.m_playerModel.messageHandler.OnVesselUpdateState += this.m_vesselManager.HandleVesselMessage;
        }
Beispiel #3
0
        /// <summary>
        /// Handle messages from server or client and choose what to do with them.
        /// </summary>
        private void HandleMessage()
        {
            NetIncomingMessage netIncomingMessage;

            while ((netIncomingMessage = m_netServer.ReadMessage()) != null)
            {
                switch (netIncomingMessage.MessageType)
                {
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.VerboseDebugMessage:
                        {
                            Log.HandleLog(LOGMessageTypes.Debug, netIncomingMessage.ReadString());
                            break;
                        }
                    case NetIncomingMessageType.WarningMessage:
                        {
                            Log.HandleLog(LOGMessageTypes.Warning, netIncomingMessage.ReadString());
                            break;
                        }
                    case NetIncomingMessageType.ErrorMessage:
                        {
                            Log.HandleLog(LOGMessageTypes.Error, netIncomingMessage.ReadString());
                            break;
                        }
                    case NetIncomingMessageType.UnconnectedData:
                        {
                            switch ((ServerMessageTypes)netIncomingMessage.ReadByte())
                            {
                                case ServerMessageTypes.RequestPing:
                                    {
                                        NetOutgoingMessage netOutgoingMessage = this.m_netServer.CreateMessage();

                                        netOutgoingMessage.Write((byte)ServerMessageTypes.RequestPing);
                                        netOutgoingMessage.Write(this.m_netServer.UniqueIdentifier);

                                        this.m_netServer.SendUnconnectedMessage(netOutgoingMessage, netIncomingMessage.SenderEndPoint);
                                        break;
                                    }
                            }

                            break;
                        }
                    /*case NetIncomingMessageType.DiscoveryRequest:
                        {
                            NetOutgoingMessage ResponseMessage = this.m_netServer.CreateMessage();

                            IGameMessage gameMessage = new DiscoveryRequestMessage
                            {
                                Hostname = "L.O.G. Server",
                                Players = this.m_netServer.Connections.Count,
                                MaximumPlayers = 32
                            };

                            gameMessage.EncodeMessage(ResponseMessage);

                            this.m_netServer.SendDiscoveryResponse(ResponseMessage, netIncomingMessage.SenderEndPoint);

                            break;
                        }*/
                    case NetIncomingMessageType.StatusChanged:
                        {
                            switch ((NetConnectionStatus)netIncomingMessage.ReadByte())
                            {
                                case NetConnectionStatus.RespondedConnect:
                                    Log.HandleLog(LOGMessageTypes.Info, "Incoming connection from", netIncomingMessage.SenderEndPoint);
                                    break;
                                case NetConnectionStatus.Connected:
                                    Log.HandleLog(LOGMessageTypes.Info, this.m_playersList[netIncomingMessage.SenderConnection].Username, "has joined the server");
                                    break;
                                case NetConnectionStatus.Disconnected:
                                    Log.HandleLog(LOGMessageTypes.Info, this.m_playersList[netIncomingMessage.SenderConnection].Username, "has left the server");
                                    break;
                            }

                            break;
                        }
                    case NetIncomingMessageType.ConnectionApproval:
                        {
                            GameMessageTypes gameMessageType = (GameMessageTypes)netIncomingMessage.SenderConnection.RemoteHailMessage.ReadByte();

                            if (gameMessageType != GameMessageTypes.ConnectionApprovalRequest)
                                break;

                            ConnectionApprovalRequestMessage Message = new ConnectionApprovalRequestMessage(netIncomingMessage.SenderConnection.RemoteHailMessage);

                            if (Message.Version == APIMain.Version && Message.Username != null && Message.Username.Length > 0)
                            {
                                netIncomingMessage.SenderConnection.Approve(this.m_netServer.CreateMessage());
                                this.m_playersList.Add(netIncomingMessage.SenderConnection, new PlayerModel(netIncomingMessage.SenderConnection, Message.Username));
                            }
                            else
                            {
                                netIncomingMessage.SenderConnection.Deny("Wrong version or username!");
                            }

                            break;
                        }
                    case NetIncomingMessageType.Data:
                        {
                            this.m_playersList[netIncomingMessage.SenderConnection].messageHandler.HandleGameMessage(netIncomingMessage);
                            break;
                        }
                    default:
                        {
                            Log.HandleLog(LOGMessageTypes.Error,
                                String.Format("Unhandled type: {0} {1} bytes {2} |  {3}", netIncomingMessage.MessageType, netIncomingMessage.LengthBytes, netIncomingMessage.DeliveryMethod, 
                                netIncomingMessage.SequenceChannel));
                            break;
                        }
                }

                this.m_netServer.Recycle(netIncomingMessage);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Handle messages from server or client and choose what to do with them.
        /// </summary>
        private void HandleMessage()
        {
            NetIncomingMessage netIncomingMessage;

            while ((netIncomingMessage = m_netServer.ReadMessage()) != null)
            {
                switch (netIncomingMessage.MessageType)
                {
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.VerboseDebugMessage:
                {
                    Log.HandleLog(LOGMessageTypes.Debug, netIncomingMessage.ReadString());
                    break;
                }

                case NetIncomingMessageType.WarningMessage:
                {
                    Log.HandleLog(LOGMessageTypes.Warning, netIncomingMessage.ReadString());
                    break;
                }

                case NetIncomingMessageType.ErrorMessage:
                {
                    Log.HandleLog(LOGMessageTypes.Error, netIncomingMessage.ReadString());
                    break;
                }

                case NetIncomingMessageType.UnconnectedData:
                {
                    switch ((ServerMessageTypes)netIncomingMessage.ReadByte())
                    {
                    case ServerMessageTypes.RequestPing:
                    {
                        NetOutgoingMessage netOutgoingMessage = this.m_netServer.CreateMessage();

                        netOutgoingMessage.Write((byte)ServerMessageTypes.RequestPing);
                        netOutgoingMessage.Write(this.m_netServer.UniqueIdentifier);

                        this.m_netServer.SendUnconnectedMessage(netOutgoingMessage, netIncomingMessage.SenderEndPoint);
                        break;
                    }
                    }

                    break;
                }

                /*case NetIncomingMessageType.DiscoveryRequest:
                 *  {
                 *      NetOutgoingMessage ResponseMessage = this.m_netServer.CreateMessage();
                 *
                 *      IGameMessage gameMessage = new DiscoveryRequestMessage
                 *      {
                 *          Hostname = "L.O.G. Server",
                 *          Players = this.m_netServer.Connections.Count,
                 *          MaximumPlayers = 32
                 *      };
                 *
                 *      gameMessage.EncodeMessage(ResponseMessage);
                 *
                 *      this.m_netServer.SendDiscoveryResponse(ResponseMessage, netIncomingMessage.SenderEndPoint);
                 *
                 *      break;
                 *  }*/
                case NetIncomingMessageType.StatusChanged:
                {
                    switch ((NetConnectionStatus)netIncomingMessage.ReadByte())
                    {
                    case NetConnectionStatus.RespondedConnect:
                        Log.HandleLog(LOGMessageTypes.Info, "Incoming connection from", netIncomingMessage.SenderEndPoint);
                        break;

                    case NetConnectionStatus.Connected:
                        Log.HandleLog(LOGMessageTypes.Info, this.m_playersList[netIncomingMessage.SenderConnection].Username, "has joined the server");
                        break;

                    case NetConnectionStatus.Disconnected:
                        Log.HandleLog(LOGMessageTypes.Info, this.m_playersList[netIncomingMessage.SenderConnection].Username, "has left the server");
                        break;
                    }

                    break;
                }

                case NetIncomingMessageType.ConnectionApproval:
                {
                    GameMessageTypes gameMessageType = (GameMessageTypes)netIncomingMessage.SenderConnection.RemoteHailMessage.ReadByte();

                    if (gameMessageType != GameMessageTypes.ConnectionApprovalRequest)
                    {
                        break;
                    }

                    ConnectionApprovalRequestMessage Message = new ConnectionApprovalRequestMessage(netIncomingMessage.SenderConnection.RemoteHailMessage);

                    if (Message.Version == APIMain.Version && Message.Username != null && Message.Username.Length > 0)
                    {
                        netIncomingMessage.SenderConnection.Approve(this.m_netServer.CreateMessage());
                        this.m_playersList.Add(netIncomingMessage.SenderConnection, new PlayerModel(netIncomingMessage.SenderConnection, Message.Username));
                    }
                    else
                    {
                        netIncomingMessage.SenderConnection.Deny("Wrong version or username!");
                    }

                    break;
                }

                case NetIncomingMessageType.Data:
                {
                    this.m_playersList[netIncomingMessage.SenderConnection].messageHandler.HandleGameMessage(netIncomingMessage);
                    break;
                }

                default:
                {
                    Log.HandleLog(LOGMessageTypes.Error,
                                  String.Format("Unhandled type: {0} {1} bytes {2} |  {3}", netIncomingMessage.MessageType, netIncomingMessage.LengthBytes, netIncomingMessage.DeliveryMethod,
                                                netIncomingMessage.SequenceChannel));
                    break;
                }
                }

                this.m_netServer.Recycle(netIncomingMessage);
            }
        }