Пример #1
0
        //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;
                }
            }
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        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++;
            }
        }
Пример #5
0
        /*
         * 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);
            }
        }
Пример #6
0
        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;
                }
            }
        }
Пример #7
0
        // 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;
                }
            }
        }
Пример #8
0
        /*
         * 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;
                }
            }
        }
Пример #9
0
        /*
         * 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);
            }
        }