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())); }
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(); } }
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(); }
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(); }
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(); }
public TelnetHandler(IMudMessage mudMessage) { MudMessageInstance = mudMessage; }