示例#1
0
        public void Send(string message)
        {
            MessageString str = new MessageString {
                Message = message
            };

            Send(str);
        }
示例#2
0
        public void PollNetwork()
        {
            if (_listener == null)
            {
                return;
            }

            if (IsOpenForNewConnecions && _listener.Pending())
            {
                TcpClient newClient = _listener.AcceptTcpClient();
                var       clientMar = new ClientMarshaller(_clientIndex, newClient, new CommsMarshaller());
                _clients.Add(clientMar);
                ConnectionStatus = GameConstants.ConnectionStatusEnum.Connected;
                ClientAdded(_clientIndex);
                var msg = new MessageString {
                    Message = "Server: You are client number " + _clientIndex
                };
                Send(newClient, msg);
                _clientIndex++;
                _logger.LogDebug("PollNetwork: New client " + _clientIndex + " added.");
            }

            if (ConnectionStatus == GameConstants.ConnectionStatusEnum.Connected)
            {
                try
                {
                    foreach (var clientMarshaller in _clients)
                    {
                        TcpClient client   = clientMarshaller.Client;
                        int       clientId = clientMarshaller.ClientId;
                        try
                        {
                            NetworkStream stream = client.GetStream();
                            if (stream.DataAvailable)
                            {
                                do
                                {
                                    int i = stream.Read(_readBuffer, 0, _readBuffer.Length);

                                    clientMarshaller.Marshaller.AddToReceiveBufferEnd(_readBuffer, i);

                                    while (clientMarshaller.Marshaller.IsObjectInReceiveBuffer())
                                    {
                                        IMarshallable obj = clientMarshaller.Marshaller.DeSerializeNextObjectInReceiveBuffer();
                                        _logger.LogDebug("PollNetwork: Object read from receive buffer: " + obj.ObjectTypeToken);
                                        DataReceived(clientId, obj);
                                    }
                                } while (stream.DataAvailable);
                            }
                        }
                        catch (Exception ex)
                        {
                            if (ex.InnerException == null)
                            {
                                _logger.LogError("Error in GameServer.PollNetwork: " + ex.ToString() +
                                                 " \nStackTrace: " + ex.StackTrace);
                            }
                            else
                            {
                                _logger.LogError("Error in GameServer.PollNetwork: " + ex.ToString() +
                                                 "\nInnerException: " + ex.InnerException.ToString() +
                                                 "\nStackTrace: " + ex.StackTrace);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (ex.InnerException == null)
                    {
                        _logger.LogError("Error in GameServer.PollNetwork: " + ex.ToString() +
                                         " \nStackTrace: " + ex.StackTrace);
                    }
                    else
                    {
                        _logger.LogError("Error in GameServer.PollNetwork: " + ex.ToString() +
                                         "\nInnerException: " + ex.InnerException.ToString() +
                                         "\nStackTrace: " + ex.StackTrace);
                    }
                }
            }
        }