package Terminal import ( "net" "git.swzry.com/NSMCServerLauncher/Logger" "fmt" "github.com/swzry/go.TSmap" "git.swzry.com/NSMCServerLauncher/Utils" ) func HandlerTerminal(clientList TSmap.TSmap,conn net.Conn, chnum int){ clobj,ok := clientList.Get(conn) if(!ok){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Client Not Found.\n",conn.RemoteAddr(),chnum) return } clientConn, ok := clobj.(*Utils.ClientConnection) if(!ok){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Internal Error: Can't Convert '%T' into 'Utils.ClientConnection'.\n",conn.RemoteAddr(),chnum,clobj) return } chlist, ok := clientConn.Channels.(TSmap.TSmap) if(!ok){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Internal Error: Can't Convert '%T' into 'TSMap.TSMap'.\n",conn.RemoteAddr(),chnum,clientConn.Channels) return } chobj,ok := chlist.Get(chnum) if(!ok){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Channel Not Found.\n",conn.RemoteAddr(),chnum) return } channel,ok := chobj.(Utils.AvaliableChannel) if(!ok){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Internal Error: Can't Convert '%T' into 'Utils.AvaliableChannel'.\n",conn.RemoteAddr(),chnum,chobj) return } channel.Term.Write([]byte("NSMC Server Launcher V1.0 - Shell\n")) channel.Term.SetPrompt("NSMC / >") for { line,err := channel.Term.ReadLine() if( err != nil){ fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Discard. Detail: %v.\n",conn.RemoteAddr(),chnum,err) break } switch line { case "exit": clientList.Delete(conn) conn.Close() break case "about": channel.Term.Write([]byte("NSMC Server Launcher V1.0\n")) channel.Term.Write([]byte("(https://git.swzry.com/zry/NSMCServerLauncher/)\n")) channel.Term.Write([]byte("By ZRY (https://www.swzry.com/)\n\n")) break default: ExecuteCommandLine(line,channel.Term,&channel.UserContext) break; } } }