public static void Main(string[] args) { Program.Write(LogMessageType.Config, "Hello master!"); try { var watch = Stopwatch.StartNew(); Console.ForegroundColor = ConsoleColor.Black; Settings = Program.LoadSettings(); LoadInvitesCodes(false); WriteInLogFile = Settings["writeInFile"]; InitializeConsole(); Server = new Server(Settings["serverPort"], Settings["maxClients"], Parse <AuthMethod>(Settings["authMethod"]), Settings["passKey"]); Server.Go(); watch.Stop(); Program.Write("Loaded server in " + watch.Elapsed.TotalSeconds.ToString("F2") + " seconds", "Trace"); Program.Write(LogMessageType.Config, "{0} commanding server {1}", Settings["serverOwner"], Settings["serverName"]); VariousJobTimer.Elapsed += VariousJobTimer_Elapsed; VariousJobTimer.Start(); ConsoleActions(); } catch (Exception e) { MainLogger.Fatal(e.Message); Console.WriteLine(e.Message); } }
static void Main(string[] args) { if (args.Length > 0) { if (args[0] == "-wait") { Thread.Sleep(int.Parse(args[1])); } } try { var watch = Stopwatch.StartNew(); Settings = Program.LoadSettings(); LoadInvitesCodes(false); WriteInLogFile = Settings["writeInFile"]; InitializeConsole(); server = new Server(Settings["serverPort"], Settings["maxClients"], Parse <AuthMethod>(Settings["authMethod"]), Settings["passKey"]); server.listenThread.Start(); watch.Stop(); Program.Write("Loaded server in " + watch.Elapsed.TotalSeconds.ToString("F2") + " seconds", "Trace"); VariousJobTimer.Elapsed += VariousJobTimer_Elapsed; VariousJobTimer.Start(); // string line = ""; while ((line = Console.ReadLine()) != "csn") { try { if (line == "") { continue; } if (line == "clients") { int uol = 0; foreach (var pair in server.Connections) { Console.WriteLine("{0}\t\t-\t\t{1}", pair.Key.ToString().PadRight(20, ' '), pair.Value.Username.PadLeft(10, ' ')); uol++; } Console.WriteLine("\n\t>> {0} users online", uol); } else if (line.StartsWith("settings")) { if (line.Length == 8) { Console.WriteLine("\n>>"); foreach (var pair in Settings) { Console.WriteLine("\t{0}-{1}", pair.Key.PadRight(20, ' '), pair.Value.ToString().PadLeft(20, ' ')); } } else { string spec = line.Substring("settings".Length + 1); dynamic result; if (Settings.TryGetValue(spec, out result)) { Console.WriteLine(">> {0}\t-\t{1}", spec, result); } else { Console.WriteLine("Not found... use \'e\' command for adding"); } } } else if (line == "cls" || line == "clear") { Console.Clear(); } else if (line.Length > 2) { if (line[1] == ' ') { if (line[0] == 'b') { string m = line.Substring(2); // buffer max if (m.Length < 1000) { if (line.EndsWith("-last") && !String.IsNullOrWhiteSpace(LastBroadcastedMsg)) { server.Broadcast(LastBroadcastedMsg); } else { server.Broadcast(m); LastBroadcastedMsg = m; } } else { Write(LogMessageType.Error, "Message is too long! Can't be longer than 1000 characters. Message copied to clipboard."); System.Windows.Forms.Clipboard.SetText(m); } } else if (line[0] == 'a') { int[] uids = new String(line.Substring(2).TakeWhile(c => c != ' ' && c != '^').ToArray()).Split(',').Select(s => int.Parse(s)).ToArray(); server.AdminMessage(line.Substring(line.IndexOf('^') + 1), uids); } else if (line[0] == 'k') { string[] params_ = line.Split(' '); Client client = server.Connections[params_[1].ToInt()]; string endpoint = client.Socket.RemoteEndPoint.ToString().Split(':')[0]; Kick(client, endpoint); RemoveBlacklist(endpoint, (params_.Length == 2) ? Settings["defaultBanTime"] : params_[2].ToInt()); } else if (line[0] == 'e') { string[] data = line.Substring(2).Split('='); lock (Settings) { if (Settings.ContainsKey(data[0])) { try { dynamic oldVal = Settings[data[0]]; //if (oldVal.GetType() == data[1].GetType()) Console.WriteLine(">>\tChanged: {0}\t=\t{1}", data[0], Settings[data[0]] = data[1]); //else // throw new ArgumentException("Wrong data type for " + data[0]); if (firstEditOfSettings) { Write("Changing settings is unsafe: no type check!", "Warning", ConsoleColor.Red); firstEditOfSettings = false; } } catch (IndexOutOfRangeException) { Console.WriteLine("Wrong syntax for E (edit) command"); } } else { Console.WriteLine("No such key... add in session memory? 1 = yes"); if (Console.ReadLine() == "1") { lock (Settings) { AddSmart(data[0], data[1]); Console.WriteLine("Added {0} = {1}", data[0], data[1]); } } else { Console.WriteLine("Dismissed"); } } } } } if (line.StartsWith("udata")) { string input = line.Substring(6); int uid; Client val; if (int.TryParse(input, out uid)) // in: "UID", out: uid (int), OUTPUT: Username { if (server.Connections.TryGetValue(uid, out val)) { Write("Username: "******"Query"); } else { Write("No client with UID: " + uid); } } else { val = server.Connections.ValuesWhere(c => c.Username == input).FirstOrDefault(); if (val != null) { Write("UID: " + val.UserID, "Query"); } else { Write("No client with Username: "******"restart")) { int delay = 0; if (line.Length > 7) { delay = int.Parse(line.Substring(8)); } Write(String.Format("Restarting in {0}...", delay), "Application", ConsoleColor.Blue); Thread.Sleep(delay); Process.Start("ChatServer.exe", "-wait 1000"); return; } else if (line == "add ic") { Console.Write("Expecting invite code: "); string code = Console.ReadLine(); lock (InviteCodes) InviteCodes.Add(code); Write(LogMessageType.Config, "Added invite code " + code); } else if (line.StartsWith("pop ic")) { string code; lock (InviteCodes) { if (InviteCodes.Count != 0) { code = InviteCodes.First(); } else { code = Helper.GenerateRandomString(6); InviteCodes.Add(code); } } Console.Write(code); if ((line.Length > 7 && line.Substring(7) == "-nc")) { Console.WriteLine(); } else { Thread.Sleep(100); System.Windows.Forms.Clipboard.SetText(code); Console.WriteLine(" -> copied"); } } else if (line.StartsWith("del ic")) { if (line == "del ic -all") { // delete file lock (InviteCodes) { InviteCodes.Clear(); File.Delete("invites.txt"); // no cross threading thanks to locking invitecodes everywhere Program.Write(LogMessageType.OK, ""); } } else { line = line.Substring(7); lock (InviteCodes) { InviteCodes.Remove(line); Program.Write(LogMessageType.OK, ""); } } } else if (line == "openf") { Process.Start("explorer", Environment.CurrentDirectory); } else if (line == "help") { Console.WriteLine(ChatServer.Properties.Resources.ConsoleCommandGuide); } else if (line == "time") { DateTime now = DateTime.Now; TimeSpan running = (DateTime.Now - Program.TimeServerStarted); string runningStr = (running.TotalMinutes < 75) ? running.TotalMinutes.ToString("F1") + " min" : running.TotalHours.ToString("F2") + " h"; Program.Write(LogMessageType.ServerMessage, "Time is {0}, process running for {1} ", now.ToLongTimeString(), runningStr); } else if (line.StartsWith("vote")) { } } } catch (Exception e) { Console.WriteLine(e.Message); } } } catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException) { Console.WriteLine("Inexistent/corrupt server.ini file, create a default one? (1 = yes)"); if (Console.ReadLine() == "1") { File.Delete("server.ini"); using (var writer = File.CreateText(Environment.CurrentDirectory + @"\server.ini")) { writer.WriteLine(Resources.DefaultSettingsFileContents); writer.Flush(); } Console.WriteLine("Created new server.ini... restart application"); System.Threading.Thread.Sleep(1000); } return; } finally { server = null; writer.Dispose(); VariousJobTimer.Dispose(); Environment.Exit(0); } }