Ejemplo n.º 1
0
 public void to_room(Room nroom)
 {
     if (inRoom != null)
     {
         inRoom.char_from_room(this);
     }
     inRoom = nroom;
     nroom.char_to_room(this);
     Command_Interpreter.Interpret("look", this);
 }
Ejemplo n.º 2
0
        private static void Main(string[] args)
        {
            var greeting = System.IO.File.ReadAllText("./config/greeting.txt");

            Client.InitializeColors();
            Command_Interpreter.Initialize();
            Globals.Initialize();
            Globals.BootDB();
            Console.WriteLine("Listening...");
            Globals.server.Start();
            while (true)
            {
                if (Globals.server.Pending())
                {
                    var connection = new Client(Globals.server.AcceptTcpClient());
                    connection.Send(greeting);
                    Console.WriteLine("connection accepted.");
                    Globals.clientList.Add(connection);
                    connection.Send("\r\n\r\nWhat name do you wish to be known by? ");
                    connection.State = Client.ConnectionState.ConGetName;
                }

                for (var i = Globals.clientList.Count - 1; i > -1; i--)
                {
                    var client = Globals.clientList[i];
                    if (!client.AttemptRead())
                    {
                        Console.WriteLine("Client Disconnected...");
                        Globals.clientList.RemoveAt(i);
                        client.Close();
                    }

                    if (!client.IsCommandPending())
                    {
                        continue;
                    }

                    if (!nanny(client, client.GetCommand(), i))
                    {
                        return;
                    }
                }
            }

            bool nanny(Client sock, string line, int position)
            {
                var command = line;

                switch (sock.State)
                {
                case Client.ConnectionState.ConGetName:
                    sock.set_Character(new Character());
                    if (sock.get_character().load_Character(command))
                    {
                        sock.Send("Please enter Password: "******"What password will you use? ");
                        sock.State = Client.ConnectionState.ConGetNewPassword;
                    }
                    break;

                case Client.ConnectionState.ConGetNewPassword:
                    sock.get_character().set_password(command);
                    sock.Send("Retype Password: "******"Limbo", out toarea);
                        sock.Send("Password Accepted\r\n");
                        sock.get_character().to_room(toarea.Get_Room(0));
                        Command_Interpreter.Interpret("look", sock.get_character());
                        sock.get_character().save_Character();
                        sock.Send("Welcome, " + sock.get_character().get_name() + "!\r\n");
                        sock.Send("Enter Command > ");
                        sock.State = Client.ConnectionState.ConPlaying;
                    }
                    else
                    {
                        sock.Send("Passwords do not match. Enter a new Password: "******"Limbo", out toarea);
                        sock.Send("Password Accepted\r\n");
                        sock.get_character().to_room(toarea.Get_Room(0));
                        Command_Interpreter.Interpret("look", sock.get_character());
                        sock.Send("Enter Command > ");
                        sock.State = Client.ConnectionState.ConPlaying;
                    }
                    else
                    {
                        sock.Send("Login Failure\r\n");
                        Console.WriteLine("Login Failure - " + sock.get_character().get_name());
                        sock.set_Character(null);
                        sock.Send("Enter Name: ");
                        sock.State = Client.ConnectionState.ConGetName;
                    }
                    break;

                case Client.ConnectionState.ConPlaying:
                    if (!Command_Interpreter.Interpret(command, sock.get_character()))
                    {
                        sock.Send("Huh?!?\r\n");
                    }

                    sock.Send("Enter Command > ");
                    sock.State = Client.ConnectionState.ConPlaying;
                    break;

                default:
                    Console.WriteLine("Invalid connection state!");
                    sock.State = Client.ConnectionState.ConPlaying;
                    break;
                }

                if (Globals.MudDown)
                {
                    return(false);
                }

                return(true);
            }
        }