Пример #1
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out PlayerName);

            return(isOk);
        }
Пример #2
0
        private void NetMessageWriter_CatanClientAuth_Response_WriteCompleted(object obj, NetworkMessageWriterWriteCompletedEventArgs e)
        {
            //getDisconnectedClientConnections(silently:true);

            // new catan client
            CatanClient catanClient = new CatanClient(e.TcpClient, e.TcpClient.Client.RemoteEndPoint.ToString(), (e.NetMessage as CatanClientAuthenticationResponseMessage).AuthRequestMessage.Playername);

            catanClients.Add(catanClient);

            Console.WriteLine($"Catan player joined: {catanClient.Name}");
            if (catanClients.Count == maxClients)
            {
                // Start game
                tcpListener.Stop();
                Thread.Sleep(1000);

                catanClients.ForEach(client =>
                {
                    var netReader            = new NetworkMessageReader(client.TcpClient);
                    netReader.ReadCompleted += NetMessageReader_CatanClientMessageReceived;
                    netReader.ReadAsync(readLoop: true);
                }); // error handling wird ignoriert !!!

                iLogicLayer.ServerFinishedListening(catanClients);
            }
        }
Пример #3
0
 public void StartTcpListener()
 {
     try
     {
         tcpListener.Start();
         while (true)
         {
             NetworkMessageReader netMessageReader = new NetworkMessageReader(tcpListener.AcceptTcpClient());
             netMessageReader.ReadCompleted += NetMessageReader_CatanClientAuth_Request_ReadCompleted;
             netMessageReader.ReadError     += (obj, e) => { e.TcpClient.Close(); };
             netMessageReader.ReadAsync();
         }
     }
     catch (SocketException socketEx)
     {
         if (socketEx.SocketErrorCode == SocketError.Interrupted)
         {
             // Tcplistener wurde geschlossen. Durch Stop()
             while (true)
             {
                 Console.ReadLine();           // Server läuft weiter ...
             }
         }
         else
         {
             iLogicLayer.ThrowException(socketEx);
         }
     }
     catch (Exception ex)
     {
         iLogicLayer.ThrowException(ex);
     }
 }
Пример #4
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out ClientOSTimestamp);

            return(isOk);
        }
Пример #5
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out AcknowledgedServerSimulationTickNumber);

            return(isOk);
        }
Пример #6
0
        private void handleVoiceMessage(VoiceMessage voiceMessage, TcpClient sender, NetworkMessageReader networkMessageReader)
        {
            if (voiceMessage.Sender.Id.HasValue && existsClientInClientListByTcpClientAndId(sender, voiceMessage.Sender.Id.Value))
            {
                Logger.log.Info($"Voicemessage received from {getServerBroadcastClientByTcpClient(sender)}");

                var clientsToRemove = new List <TcpClient>();

                foreach (ServerBroadcastClient client in clients.Where(client => !client.Client.Id.Value.Equals(voiceMessage.Sender.Id.Value)).ToList())
                {
                    // sendBroadcast
                    try
                    {
                        NetworkMessageWriter messageWriter = new NetworkMessageWriter(client.TcpClient);
                        messageWriter.WriteError += (_ob, _e) => { Logger.log.Error(_e); };
                        messageWriter.WriteAsync(voiceMessage);
                    }
                    catch (Exception ex)
                    {
                        // connection error? client is offline?
                        Logger.log.Error(ex);
                        clientsToRemove.Add(client.TcpClient);
                    }
                }

                removeClientsFromListByTcpClients(clientsToRemove);
            }
        }
Пример #7
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out PlayerId) &&
                        message.Read(out SimulationTickNumber);

            return(isOk);
        }
Пример #8
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out ClientOSTimeStamp) &&
                        message.Read(out ServerWorldTimeInTicks);

            return(isOk);
        }
Пример #9
0
        public bool TryReadHeader(NetworkMessageReader message, out ushort arraySize)
        {
            //arraySize = 0;

            bool isOk = true &&
                        message.Read(out arraySize);

            return(isOk);
        }
Пример #10
0
        public bool TryReadNextArrayItem(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out SimulationTickNumber) &&
                        message.Read(out NetworkEntityId) &&
                        message.ReadEnumFromByte(out InputActionType);

            return(isOk);
        }
Пример #11
0
        public bool TryReadNextArrayItem(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out PlayerInputSequenceNumber) &&
                        message.Read(out MoveInput) &&
                        message.Read(out JumpRequestedInput);

            return(isOk);
        }
Пример #12
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out AcknowledgedLastReceivedPlayerInputSequenceNumber) &&
                        message.Read(out LastAppliedServerPlayerInputSequenceNumber) &&
                        message.Read(out ServerSimulationTickNumber);

            return(isOk);
        }
Пример #13
0
        public bool TryReadNextArrayItem(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out NetworkEntityId) &&
                        message.Read(out Position) &&
                        message.Read(out YawOrientation) &&
                        message.Read(out MoveSpeedDecimalPercentage) &&
                        message.Read(out CurrentMoveInputVelocity) &&
                        message.Read(out PhysicsEngineLinearVelocity) &&
                        message.Read(out IsGrounded);

            return(isOk);
        }
        public void OnDataReceived(byte[] buffer, int dataSize)
        {
            if (_message == null)
            {
                _message = new NetworkMessageReader();
            }

            if (_message.Read(buffer, dataSize))
            {
                var bytes  = _message.Payload();
                var output = Encoding.UTF8.GetString(bytes);
                Debug.Log($"Client {_id}: got: {output}");
                _message = null;
            }
        }
Пример #15
0
        public void OnDataReceived(byte[] buffer, int dataSize)
        {
            if (_message == null)
            {
                _message = new NetworkMessageReader();
            }

            if (_message.Read(buffer, dataSize))
            {
                var bytes  = _message.Payload();
                var output = Encoding.UTF8.GetString(bytes);
                Debug.Log(output);
                //NetworkCommander.ReceiveSyncedCommand(output);
                NetworkCommander.ReceiveSyncMessages(output);
                _message = null;
            }
        }
Пример #16
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true &&
                        message.Read(out CanJoinGame);

            if (CanJoinGame)
            {
                isOk = isOk &&
                       message.Read(out InGameSceneAssetId);
            }
            else
            {
                isOk = isOk &&
                       message.Read(out ErrorMessage);
            }

            return(isOk);
        }
Пример #17
0
        /// <summary>
        /// Receive a message from the connected client, and delegates it to listeners.
        /// </summary>
        /// <returns>Received NetworkMessage.</returns>
        private NetworkMessage StreamToMessage()
        {
            // Read message length
            byte[] lBytes = new byte[4];
            clientStream.Read(lBytes, 0, 4);
            int l = BytesToInt(lBytes);

            // Read message
            byte[] bytes = new byte[l];
            clientStream.Read(bytes, 0, bytes.Length);

            // Deserialize message
            string         data    = Encoding.UTF8.GetString(bytes);
            NetworkMessage message = null;

            try
            {
                message = NetworkMessageReader.Deserialize(data);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Skipped null message");
                return(null);
            }

            // Delegate event.
            if (OnMessageReceived != null)
            {
                OnMessageReceived.Invoke(this, message);
            }

            List <Action <NetworkMessage> > actionList;

            if (eventList.TryGetValue(message.Message, out actionList))
            {
                foreach (Action <NetworkMessage> action in actionList)
                {
                    action.Invoke(message);
                }
            }

            return(message);
        }
Пример #18
0
        public void AcceptClientsForEver()
        {
            lock (tcpListener)
            {
                tcpListener.Start();
            }
            if (nicNotifier == null)
            {
                nicNotifier = new NetworkInterfaceStateNotifier(5, localEndPoint.Address);
                nicNotifier.NetworkInterfaceIsNotUpEvent += NicNotifier_NetworkInterfaceIsNotUpEvent;
                nicNotifier.Start();
            }

            while (true)
            {
                try
                {
                    Logger.log.Info("Waiting for clients ...");

                    NetworkMessageReader messageReader = new NetworkMessageReader(tcpListener.AcceptTcpClient());
                    messageReader.ReadCompleted += MessageReader_ReadCompleted;
                    messageReader.ReadError     += MessageReader_ReadError;

                    messageReader.OnErrorStopReadingAndCloseClient = true;
                    messageReader.ReadAsync(true);
                }
                catch (Exception ex)
                {
                    Logger.log.Error(ex);
                    bool needTcpListenerRestart = true;
                    while (needTcpListenerRestart)
                    {
                        while (restartTcpListener())
                        {
                            needTcpListenerRestart = false;
                            break;
                        }
                        Thread.Sleep(5000); // wait 5 sec
                    }
                }
            }
        }
Пример #19
0
        public void OnDataReceived(byte[] buffer, int dataSize)
        {
            if (_message == null)
            {
                _message = new NetworkMessageReader();
            }

            if (_message.Read(buffer, dataSize))
            {
                var bytes  = _message.Payload();
                var output = Encoding.UTF8.GetString(bytes);
                Debug.Log($"Server: Received: {output}");
                if (output.Contains("PING"))
                {
                    BroadcastToClients("PING");
                }

                _message = null;
            }
        }
Пример #20
0
    /// <summary>
    /// Checks if the server sent any message.
    /// </summary>
    private void ReceiveMessages()
    {
        // The client is null or not connected anymore
        // Stop running the thread
        if (client == null || !client.Connected)
        {
            runningThread = false;
            return;
        }

        while (stream.DataAvailable)
        {
            // Try to read the message.
            try
            {
                byte[] lBytes = new byte[4];
                stream.Read(lBytes, 0, 4);
                int    l     = BytesToInt(lBytes);
                byte[] bytes = new byte[l];

                stream.Read(bytes, 0, bytes.Length);
                // Log data.
                string         data           = Encoding.UTF8.GetString(bytes);
                NetworkMessage networkMessage = NetworkMessageReader.Deserialize(data);

                if (networkMessage == null)
                {
                    Debug.LogError("The received message object could not be deserialized to NetworkMessage.");
                    return;
                }

                AddReceivedMessages(networkMessage);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
Пример #21
0
        // TODO Threadsicher???!!!!
        public void Connect()
        {
            tcpClient     = new TcpClient();
            messageReader = new NetworkMessageReader(tcpClient);
            messageWriter = new NetworkMessageWriter(tcpClient);

            messageReader.OnErrorStopReadingAndCloseClient = true;
            messageWriter.OnErrorStopWritingAndCloseClient = true;

            messageReader.ReadCompleted += MessageReader_ReadCompleted;
            messageReader.ReadError     += MessageReader_ReadError;
            messageWriter.WriteError    += MessageWriter_WriteError;

            IsConnected  = false;
            IsConnecting = true;

            var config = AppConfiguration.ReadConfig();

            try
            {
                tcpClient.BeginConnect(config.ServerIP, config.ServerPort, tcpClientConnectCallback, config);
            }
            catch (Exception ex)
            {
                IsConnected  = false;
                IsConnecting = false;
                throw ex;
            }
            finally
            {
                if (autoReconnectTimer == null)
                {
                    autoReconnectTimer = new System.Threading.Timer(autoReconnectTimerCallback, null, autoReconnectTimerIntervalInMs, autoReconnectTimerIntervalInMs);
                }
            }
        }
Пример #22
0
        public bool TryRead(NetworkMessageReader message)
        {
            bool isOk = true;

            return(isOk);
        }
Пример #23
0
        private void handleConnectMessage(ConnectMessage connectMessage, TcpClient sender, NetworkMessageReader messageReader)
        {
            try
            {
                if (connectMessage.BroadCastClient == null)
                {
                    // close
                    sender.Close();
                    return;
                }

                if (connectMessage.BroadCastClient.Name != null && connectMessage.BroadCastClient.Name.Length > 2)
                {
                    var newClient = new BroadcastClient(connectMessage.BroadCastClient.Name, ++lastClientID);
                    lock (clients)
                    {
                        clients.Add(new ServerBroadcastClient(newClient, sender));
                    }

                    NetworkMessageWriter messageWriter = new NetworkMessageWriter(sender);
                    messageWriter.OnErrorStopWritingAndCloseClient = true;
                    messageWriter.WriteError += MessageWriter_WriteError;

                    // send client ConnectMessage Message
                    connectMessage.Connected       = true;
                    connectMessage.BroadCastClient = newClient; // modified ..
                    messageWriter.WriteAsync(connectMessage);

                    Logger.log.Info($"client connected {connectMessage.BroadCastClient}");
                }
                else
                {
                    Logger.log.Warn("BroadCastClient name not ok");
                    // close
                    sender.Close();
                }
            }
            catch (Exception ex)
            {
                Logger.log.Error(ex);
            }
        }