- Timestamp:
- Sep 9, 2014, 8:04:37 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Telnet/Telnet.cs
r142 r182 9 9 public class Telnet : IServer 10 10 { 11 private staticThread telnetThread = null;12 private staticTcpListener listener = null;13 private staticbool closed = false;14 private staticbool authEnabled = false;15 private staticList<TelnetConnection> connections = new List<TelnetConnection> ();11 private Thread telnetThread = null; 12 private TcpListener listener = null; 13 private bool closed = false; 14 private bool authEnabled = false; 15 private List<TelnetConnection> connections = new List<TelnetConnection> (); 16 16 17 public Telnet ( int port)17 public Telnet () 18 18 { 19 19 try { 20 if (!GamePrefs.GetBool (EnumGamePrefs.TelnetEnabled)) { 21 return; 22 } 23 24 int port = GamePrefs.GetInt (EnumGamePrefs.TelnetPort); 25 20 26 authEnabled = GamePrefs.GetString (EnumGamePrefs.TelnetPassword).Length != 0; 21 27 if (authEnabled) … … 25 31 telnetThread = ThreadMaster.Create ("thread TelnetListenThread", new ThreadStart (telnetListenThread)); 26 32 telnetThread.Start (); 27 Log.Out ("Started Telnet thread on " + port); 33 34 NetTelnetServer.RegisterServer (this); 35 36 Log.Out ("Started Telnet on " + port); 28 37 } catch (Exception e) { 29 38 Log.Out ("Error in Telnet.ctor: " + e); … … 34 43 { 35 44 try { 36 Log.Out ("Started thread_TelnetListenThread()");37 45 listener.Start (); 38 while (!closed) { 39 Thread.Sleep (10); 40 if (listener.Pending ()) { 46 try { 47 while (!closed) { 41 48 TelnetConnection c = new TelnetConnection (listener.AcceptTcpClient (), authEnabled); 42 49 connections.Add (c); 43 Log.Out ("Telnet connection from: " + c.GetEndPoint ());44 if (authEnabled) {45 c.WriteLine ("Please enter password:");46 } else {47 LoginMessage (c);48 }49 50 } 50 51 foreach (TelnetConnection c in connections) { 52 if (c.IsClosed ()) { 53 c.Close (); 54 connections.Remove (c); 55 break; 56 } 57 if (c.Read ()) { 58 string line = lineCorrecter (c.GetLine ()); 59 if (!c.IsAuthenticated ()) { 60 if (line.Equals (GamePrefs.GetString (EnumGamePrefs.TelnetPassword))) { 61 c.SetAuthenticated (); 62 c.WriteLine ("Logon successful."); 63 c.WriteLine (string.Empty); 64 c.WriteLine (string.Empty); 65 c.WriteLine (string.Empty); 66 LoginMessage (c); 67 } else { 68 c.WriteLine ("Password incorrect, please enter password:"); 69 } 70 } else { 71 if (line.ToLower ().Equals ("exit")) { 72 Log.Out ("Telnet connection closed by client: " + c.GetEndPoint ()); 73 c.Close (); 74 connections.Remove (c); 75 break; 76 } 77 Log.Out ("Telnet executed \"" + line + "\" from: " + c.GetEndPoint ()); 78 ConsoleOutputSeparator.QueueNetCommand (line, c); 79 } 80 } 81 } 51 } catch (SocketException) { 52 } catch (ThreadInterruptedException) { 82 53 } 83 Log.Out ("Exited thread_TelnetListenThread()");84 54 ThreadMaster.Remove (Thread.CurrentThread.Name); 85 55 } catch (Exception ex) { 86 Log.Out ("Error in TelnetListenThread: " + ex.Message); 87 Log.Out ("Stack Trace: " + ex.StackTrace); 56 Log.Out ("Error in TelnetListenThread: " + ex); 88 57 } 89 }90 91 private void LoginMessage (TelnetConnection c)92 {93 c.WriteLine ("*** Connected with 7DTD server.");94 c.WriteLine ("*** Dedicated server only build");95 c.WriteLine ("*** Allocs server fixes loaded");96 c.WriteLine (string.Empty);97 c.WriteLine ("Server IP: " +98 ((GamePrefs.GetString (EnumGamePrefs.ServerIP) != null && GamePrefs.GetString (EnumGamePrefs.ServerIP).Length != 0) ? GamePrefs.GetString (EnumGamePrefs.ServerIP) : "Any")99 );100 c.WriteLine ("Server port: " + GamePrefs.GetInt (EnumGamePrefs.ServerPort));101 c.WriteLine ("Max players: " + GamePrefs.GetInt (EnumGamePrefs.ServerMaxPlayerCount));102 c.WriteLine ("Game mode: " + GamePrefs.GetString (EnumGamePrefs.GameMode));103 c.WriteLine ("World: " + GamePrefs.GetString (EnumGamePrefs.GameWorld));104 c.WriteLine ("Game name: " + GamePrefs.GetString (EnumGamePrefs.GameName));105 c.WriteLine ("Difficulty: " + GamePrefs.GetInt (EnumGamePrefs.GameDifficulty));106 c.WriteLine (string.Empty);107 c.WriteLine ("Press 'help' to get a list of all commands. Press 'exit' to end session.");108 c.WriteLine (string.Empty);109 }110 111 private string lineCorrecter (string line)112 {113 string res = "";114 for (int i = 0; i < line.Length; i++) {115 if (line [i] >= ' ' && line [i] != '\'') {116 res += line [i];117 }118 }119 return res.Trim ();120 58 } 121 59 … … 126 64 if (listener != null) { 127 65 listener.Stop (); 66 listener = null; 128 67 } 129 68 foreach (TelnetConnection c in connections) { … … 131 70 } 132 71 Thread.Sleep (100); 72 if (telnetThread != null) { 73 telnetThread.Interrupt (); 74 } 133 75 } catch (Exception e) { 134 76 Log.Out ("Error in Telnet.Disconnect: " + e); … … 139 81 { 140 82 try { 83 List<TelnetConnection> toRemove = new List<TelnetConnection> (); 141 84 foreach (TelnetConnection c in connections) { 142 if (c.IsClosed ()) { 143 c.Close (); 144 } 85 if (c.IsClosed ()) 86 toRemove.Add (c); 87 } 88 foreach (TelnetConnection c in toRemove) { 89 connections.Remove (c); 145 90 } 146 91 } catch (Exception e) {
Note:
See TracChangeset
for help on using the changeset viewer.