//Gets the player socket and then receives the info they are sending back for processing static void clientReceiveThread(Object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; ASCIIEncoding encoder = new ASCIIEncoding(); bool socketLost = false; while ((quit == false) && (socketLost == false)) //Only runs while the player is connected and the server is still live { byte[] buffer = new byte[4096]; try { int result = receiveInfo.socket.Receive(buffer); if (result > 0) { clientCommand.Enqueue(new ClientMessage(receiveInfo.socket, encoder.GetString(buffer, 0, result))); } } catch (System.Exception) { clientCommand.Enqueue(new ClientLost(receiveInfo.socket)); socketLost = true; } } }
static void clientReceiveThread(Object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; bool socketLost = false; while ((quit == false) && (socketLost == false)) { byte[] buffer = new byte[4094]; try { int result = receiveInfo.socket.Receive(buffer); if (result > 0) { ASCIIEncoding encoder = new ASCIIEncoding(); lock (incomingMessages) { incomingMessages.AddLast(receiveInfo.ID + ":" + encoder.GetString(buffer, 0, result)); } } } catch (System.Exception ex) { socketLost = true; } } }
static void clientReceiveThread(object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; bool socketactive = true; while ((active == true) && (socketactive == true)) { byte[] buffer = new byte[4094]; try { int result = receiveInfo.socket.Receive(buffer); if (result > 0) { ASCIIEncoding encoder = new ASCIIEncoding(); lock (incommingMessages) { string message = encoder.GetString(buffer, 0, result); receiveInfo.clientCharacter.playerRoom = MyDungeon.Process(receiveInfo.clientCharacter, message, receiveInfo.socket); MyDungeon.RoomInfo(receiveInfo.clientCharacter, receiveInfo.socket); } } } catch (System.Exception ex) { socketactive = false; } } }
static void acceptClientThread(object obj) { Socket s = obj as Socket; int ID = 0; while (active == true) { var newClientSocket = s.Accept(); var myThread = new Thread(clientReceiveThread); string clientID = "" + ID; var newCharacter = new Character(clientID); var ThreadLaunchInfo = new ReceiveThreadLaunchInfo(ID, newClientSocket, newCharacter); ThreadLaunchInfo.clientCharacter.SetPlayerRoom(MyDungeon.SetRoom(), ThreadLaunchInfo.socket); MyDungeon.RoomInfo(ThreadLaunchInfo.clientCharacter, ThreadLaunchInfo.socket); connectedClients.Add(clientID, ThreadLaunchInfo); myThread.Start(ThreadLaunchInfo); ID++; } }
/* * This is created to accept clients and is always running after server boots up. */ static void acceptClientThread(object obj) { Socket s = obj as Socket; int ID = 0; while (active == true) { var newClientSocket = s.Accept(); var myThread = new Thread(clientReceiveThread); string clientID = "" + ID; var newCharacter = new Character(clientID); var userstate = 0; var ThreadLaunchInfo = new ReceiveThreadLaunchInfo(ID, newClientSocket, newCharacter, userstate); String CharacterName = ThreadLaunchInfo.clientCharacter.name; ThreadLaunchInfo.clientCharacter.SetPlayerRoom(MyDungeon.SetRoom(), ThreadLaunchInfo.socket); connectedClients.Add(CharacterName, ThreadLaunchInfo); myThread.Start(ThreadLaunchInfo); ID++; Console.WriteLine("Client Joined " + clientID); } }
static void clientReceiveThread(object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; bool socketactive = true; socketToCharacter.Add(receiveInfo.socket, receiveInfo.clientCharacter); var sql = "insert into " + "table_characters" + " (name, room) values"; sql += "('" + receiveInfo.clientCharacter.name + "'"; sql += ","; sql += "'" + receiveInfo.clientCharacter.playerRoom + "'"; sql += ")"; SQLiteCommand command = new sqliteCommand(sql, connection); try { command.ExecuteNonQuery(); } catch { Console.WriteLine("Failed to perform simple addition but still did it anyway."); } MudowRun.RoomInfo(receiveInfo.socket, connection, socketToCharacter); while ((active == true) && (socketactive == true)) { byte[] buffer = new byte[4094]; try { int result = receiveInfo.socket.Receive(buffer); if (result > 0) { ASCIIEncoding encoder = new ASCIIEncoding(); lock (incommingMessages) { string message = encoder.GetString(buffer, 0, result); if (receiveInfo.clientCharacter.PlayerLoginDetails(receiveInfo.userState, message, connection) == false) { MudowRun.Process(receiveInfo.clientCharacter, message, receiveInfo.socket, socketToCharacter, connection); } MudowRun.RoomInfo(receiveInfo.socket, connection, socketToCharacter); } } } catch (System.Exception ex) { socketactive = false; } } }
// This thread is created to listen for client messages constantly. static void clientReceiveThread(object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; bool socketactive = true; ASCIIEncoding encoder = new ASCIIEncoding(); // Add the client to dictonaries for use in Dungeon.Process() CharacterbySocket.Add(receiveInfo.socket, receiveInfo.clientCharacter); SocketbyCharacter.Add(receiveInfo.clientCharacter.name, receiveInfo.socket); // While the client exists and the program is running try and get the clients message. while ((active == true) && (socketactive == true)) { // Clear the last message. byte[] buffer = new byte[4094]; try { //Listen for the user. int result = receiveInfo.socket.Receive(buffer); // If something arrives. if (result > 0) { // Lock incommingmessages to prevent conflicts. lock (incommingMessages) { // Decode the clients message string message = encoder.GetString(buffer, 0, result); // If the client has finished character creation and logging in the move to the MUD. if (receiveInfo.clientCharacter.PlayerLoginDetails(ref receiveInfo.UserState, message, receiveInfo.socket, connection, ref receiveInfo.clientCharacter.name) == false) { // Deals with the clients requests for movement or chatting MyDungeon.Process(ConnectedClients, receiveInfo.clientCharacter, message, receiveInfo.socket, CharacterbySocket, SocketbyCharacter, connection); } // Display information. MyDungeon.RoomInfo(receiveInfo.socket, connection, CharacterbySocket); } } } catch (System.Exception ex) { ConnectedClients.Remove(receiveInfo.clientCharacter.name); ActiveSockets.Remove(receiveInfo.clientCharacter.name); //receiveInfo.socket.Send(encoder.GetBytes("Server Error has caused disconnection")); socketactive = false; } } }
/* * This thread is created to listen for client messages constantly. */ static void clientReceiveThread(object obj) { ReceiveThreadLaunchInfo receiveInfo = obj as ReceiveThreadLaunchInfo; bool socketactive = true; ASCIIEncoding encoder = new ASCIIEncoding(); // Add the client to dictonaries for use in dungeon->process. socketToCharacter.Add(receiveInfo.socket, receiveInfo.clientCharacter); characterToSocket.Add(receiveInfo.clientCharacter, receiveInfo.socket); // While the client exists and the program is running try and get the clients message. while ((active == true) && (socketactive == true)) { // Clear the last message. byte[] buffer = new byte[4094]; try { //Listen for the user. int result = receiveInfo.socket.Receive(buffer); // If something arrives. if (result > 0) { // Lock incommingmessages to prevent conflicts. lock (incommingMessages) { // Decode the clients message string message = encoder.GetString(buffer, 0, result); // If the client has finished character creation and logging in the move to the MUD. if (receiveInfo.clientCharacter.PlayerLoginDetails(ref receiveInfo.userState, message, receiveInfo.socket, connection, ref receiveInfo.clientCharacter.name, stringToCharacter, ref receiveInfo.clientCharacter) == false) { // Handle MUD playing. MudowRun.Process(receiveInfo.clientCharacter, message, receiveInfo.socket, socketToCharacter, characterToSocket, stringToCharacter, connection); } // Display information. MudowRun.RoomInfo(receiveInfo.socket, connection, socketToCharacter, stringToCharacter); } } } catch (System.Exception ex) { socketactive = false; } } }
/* * This is created to accept clients and is always running after server boots up. */ static void acceptClientThread(object obj) { Socket s = obj as Socket; int ID = 0; while (active == true) { var NewClientSocket = s.Accept(); var MyThread = new Thread(clientReceiveThread); string ClientID = "" + ID; var newCharacter = new Character(ClientID); var UserState = 0; var ThreadLaunchInfo = new ReceiveThreadLaunchInfo(ID, NewClientSocket, newCharacter, UserState); //sets the characters name String CharacterName = ThreadLaunchInfo.clientCharacter.name; ThreadLaunchInfo.clientCharacter.SetPlayerRoom(MyDungeon.SetRoom(), ThreadLaunchInfo.socket); //Adds this client to the dictionary of connected clients ConnectedClients.Add(CharacterName, ThreadLaunchInfo); //Adds this socket to the acitve socket dictitonary ActiveSockets.Add(CharacterName, true); MyThread.Start(ThreadLaunchInfo); ID++; Console.WriteLine("Client Joined " + ClientID); } }