static void Main(string[] args) { if (Mud.Start("database/")) { var telnetListener = new TelnetClientSource(); telnetListener.Listen(); } }
void IOpenable.HandleClose(Actor Actor) { if (Open) { if (Actor.ConnectedClient != null) { Mud.SendEventMessage(Actor, EventMessageScope.Single, "You close the door.\r\n"); } Mud.SendEventMessage(Actor, EventMessageScope.External, Actor.Short + " closes the door.\r\n"); } Open = false; }
void IOpenable.HandleOpen(Actor Actor) { if (!Open) { if (Actor.ConnectedClient != null) { Mud.SendEventMessage(Actor, EventMessageScope.Single, "You open the door.\r\n"); } Mud.SendEventMessage(Actor, EventMessageScope.External, Actor.Short + " opens the door.\r\n"); } Open = true; }
void OnNewClient(IAsyncResult _asyncResult) { System.Net.Sockets.Socket ClientSocket = ListenSocket.EndAccept(_asyncResult); ListenSocket.BeginAccept(OnNewClient, null); var NewClient = new TelnetClient { Socket = ClientSocket }; ClientSocket.BeginReceive(NewClient.Storage, 0, 1024, System.Net.Sockets.SocketFlags.Partial, OnData, NewClient); Console.WriteLine("New standard client: " + ClientSocket.RemoteEndPoint.ToString()); Mud.ClientConnected(NewClient); }
public LoginCommandHandler() { Parser = new CommandParser(); Parser.AddCommand( new Sequence(new KeyWord("LOGIN", false), new SingleWord("NAME")), new CommandProcessorWrapper((m, a) => { a.Short = m.Arguments["NAME"].ToString(); a.ConnectedClient.CommandHandler = Mud.ParserCommandHandler; a.Rank = 500; //Everyone is a wizard! Thing.Move(a, Mud.GetObject("dummy")); Mud.EnqueuClientCommand(a.ConnectedClient, "look"); }), "Login to an existing account."); }
void OnData(IAsyncResult _asyncResult) { var Client = _asyncResult.AsyncState as TelnetClient; try { System.Net.Sockets.SocketError Error; int DataSize = Client.Socket.EndReceive(_asyncResult, out Error); if (DataSize == 0 || Error != System.Net.Sockets.SocketError.Success) { Mud.ClientDisconnected(Client); } else { for (int i = 0; i < DataSize; ++i) { if (Client.Storage[i] == '\n' || Client.Storage[i] == '\r') { if (!String.IsNullOrEmpty(Client.CommandQueue)) { String Command = Client.CommandQueue; Client.CommandQueue = ""; Mud.EnqueuClientCommand(Client, Command); } } else if (Client.Storage[i] == '\b') { if (Client.CommandQueue.Length > 0) { Client.CommandQueue = Client.CommandQueue.Remove(Client.CommandQueue.Length - 1); } } else if (ValidCharacters.Contains((char)Client.Storage[i])) { Client.CommandQueue += (char)Client.Storage[i]; } } Client.Socket.BeginReceive(Client.Storage, 0, 1024, System.Net.Sockets.SocketFlags.Partial, OnData, Client); } } catch (Exception e) { Mud.ClientDisconnected(Client); } }
public void HandleCommand(Client Client, String Command) { try { var matchedCommand = Parser.ParseCommand(Command, Client.Player); if (matchedCommand != null) { matchedCommand.Command.Processor.Perform(matchedCommand.Match, Client.Player); } else { Client.Send("huh?"); } } catch (Exception e) { Mud.ClearPendingMessages(); Client.Send(e.Message); } }