private static void MainThread(object data) { QuarterServer server = (QuarterServer)data; ColorPrint( "@@@@@@@@@@@ Quarter Share\n@@@@@@@@@@@\n@@@@@@@@@@@ Use command "); Blue(".help"); ColorPrint( " to learn more about the server's\n@@@###@###@ internal commands\n@@@@@#@#@@@\n" + "@@@###@###@ The server is running at " + server.Host + ":" + server.Port + "\n" + "@@@#@@@@@#@\n@#@###@###@\n@@@@@@@@@@@\n@@@@@@@@@@@\n@@@@@@@@@@@\n\n"); while (true) { try { TcpClient connection = server.Listener.AcceptTcpClient(); new ClientWorker(server, connection); } catch { Red("Failed to accept tcp connection"); } } }
public static void ResolveInternalCommand(QuarterServer server, string raw) { Command TheCommand = null; if (raw.StartsWith(".")) { raw = raw.Substring(1); Command[] AllCommands = { new ShowHelpCommand(server, raw), new ShowFlagCommand(server, raw), new ChangeFlagCommand(server, raw), new ListClientCommand(server, raw), new StopServerCommand(server, raw), new AllowClientCommand(server, raw), new KickClientCommand(server, raw), new SendToClientCommand(server, raw) }; foreach (Command c in AllCommands) { if (c.IsMatch()) { TheCommand = c; break; } } } else { TheCommand = new SendToClientCommand(server, "send @p " + raw); } if (TheCommand == null) { Red("Unknown command\n"); PrintInternalCommandHelp(); return; } try { TheCommand.Handle(); } catch { Red("Command exception\n"); PrintInternalCommandHelp(); } }
public static void Main(string[] args) { ServerConfig config = UserInput.ResolveShellArgument(args); Console.OutputEncoding = Encoding.UTF8; Console.WriteLine("Press any key to start the server"); Console.ReadKey(); Console.Clear(); Console.SetCursorPosition(0, 0); ServerWorker SThread = new ServerWorker(config); UsingServer = SThread.Server; while (true) { UserInput.ResolveInternalCommand(UsingServer, Console.ReadLine()); } }
public ClientWorker(QuarterServer server, TcpClient tcp) { Client = new QuarterClient(server, tcp); new Thread(MainThread).Start(Client); }
public ListClientCommand(QuarterServer server, string raw) : base(server, raw) { }
public ChangeFlagCommand(QuarterServer server, string raw) : base(server, raw) { }
public ShowFlagCommand(QuarterServer server, string raw) : base(server, raw) { }
public StopServerCommand(QuarterServer server, string raw) : base(server, raw) { }
public Command(QuarterServer server, string raw) { Server = server; Raw = raw; Split = raw.Split(' '); }
public SendToClientCommand(QuarterServer server, string raw) : base(server, raw) { }
public ServerWorker(ServerConfig init) { Server = new QuarterServer(init); new Thread(MainThread).Start(Server); }