Exemple #1
0
        public Tuple <List <string>, string> ParseRawMessage(string rawMessage)
        {
            string[]      messages       = rawMessage.Split(StartMessageCharacter);
            List <string> parsedMessages = new List <string>();
            StringBuilder strBldr        = new StringBuilder();

            foreach (string message in messages)
            {
                //we got a new message, clear out any old ones
                strBldr.Clear();
                string newMessage = message.Replace("\0", "");
                if (newMessage.EndsWith(EndMessageCharacter.ToString()))
                {
                    try
                    {
                        IMudMessage mudMessage = StringToMessage(newMessage.Remove(newMessage.Length - 1));
                        parsedMessages.Add(mudMessage.Message);
                    }
                    catch (Exception)
                    {
                        //message is invalid json object, throw it away
                    }
                }
                else
                {
                    strBldr.Append(StartMessageCharacter + newMessage);
                }
            }

            return(new Tuple <List <string>, string>(parsedMessages, strBldr.ToString()));
        }
Exemple #2
0
        public ConnectionHandler(IMudMessage mudMessage)
        {
            ContinueRunning = true;
            TcpClient   clientSocket = default(TcpClient);
            TcpListener serverSocket = new TcpListener(IPAddress.Any, GlobalReference.GlobalValues.Settings.Port);

            serverSocket.Start();

            while (ContinueRunning)
            {
                clientSocket = serverSocket.AcceptTcpClient();
                LogConnection(clientSocket);
                clientSocket.ReceiveBufferSize = (int)Math.Pow(2, 20);
                clientSocket.SendBufferSize    = clientSocket.ReceiveBufferSize;
                ServerHandler serverHandler = new ServerHandler(clientSocket, mudMessage);
            }

            clientSocket.Close();
            serverSocket.Stop();

            if (GlobalReference.GlobalValues.Settings.UseCachingFileIO)
            {
                ICachedFileIO cachedFileIO = GlobalReference.GlobalValues.FileIO as ICachedFileIO;
                cachedFileIO.Flush();
            }
        }
Exemple #3
0
        private void SendMessage(string outboundMessage)
        {
            IMudMessage message = MudMessageInstance.CreateNewInstance();

            message.Guid    = _guid;
            message.Message = outboundMessage;

            byte[]        sendBytes     = Encoding.Unicode.GetBytes(message.Serialize());
            NetworkStream networkStream = _clientSocket.GetStream();

            networkStream.Write(sendBytes, 0, sendBytes.Length);
            networkStream.Flush();
        }
Exemple #4
0
        public ClientHandler(string ipAddress, int port, IMudMessage message) : base(message)
        {
            _guid         = Guid.NewGuid().ToString();
            _clientSocket = new TcpClient();
            _clientSocket.ReceiveBufferSize = (int)Math.Pow(2, 20);
            _clientSocket.SendBufferSize    = _clientSocket.ReceiveBufferSize;
            _clientSocket.Connect(ipAddress, port);

            Thread messageLoop = new Thread(GetMessageLoop);

            messageLoop.IsBackground = true;
            messageLoop.Name         = "GetMessageLoop";
            messageLoop.Start();

            messageLoop = new Thread(SendMessageLoop);
            messageLoop.IsBackground = true;
            messageLoop.Name         = "SendMessageLoop";
            messageLoop.Start();
        }
Exemple #5
0
        public ServerHandler(TcpClient clientSocket, IMudMessage mudMessage) : base(mudMessage)
        {
            _guid         = Guid.NewGuid().ToString();
            _clientSocket = clientSocket;
            _loginState   = LoginState.AsciiArt;
            Thread messageHandlerLoopThread = new Thread(MessageHandlerLoop);

            messageHandlerLoopThread.IsBackground = true;
            messageHandlerLoopThread.Start();

            Thread messageLoop = new Thread(GetMessageLoop);

            messageLoop.IsBackground = true;
            messageLoop.Name         = "GetMessageLoop";
            messageLoop.Start();

            messageLoop = new Thread(SendMessageLoop);
            messageLoop.IsBackground = true;
            messageLoop.Name         = "SendMessageLoop";
            messageLoop.Start();
        }
Exemple #6
0
 public TelnetHandler(IMudMessage mudMessage)
 {
     MudMessageInstance = mudMessage;
 }