Terminal.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package Terminal
  2. import (
  3. "net"
  4. "git.swzry.com/NSMCServerLauncher/Logger"
  5. "fmt"
  6. "github.com/swzry/go.TSmap"
  7. "git.swzry.com/NSMCServerLauncher/Utils"
  8. )
  9. func HandlerTerminal(clientList TSmap.TSmap,conn net.Conn, chnum int){
  10. clobj,ok := clientList.Get(conn)
  11. if(!ok){
  12. fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Client Not Found.\n",conn.RemoteAddr(),chnum)
  13. return
  14. }
  15. clientConn, ok := clobj.(*Utils.ClientConnection)
  16. if(!ok){
  17. 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)
  18. return
  19. }
  20. chlist, ok := clientConn.Channels.(TSmap.TSmap)
  21. if(!ok){
  22. 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)
  23. return
  24. }
  25. chobj,ok := chlist.Get(chnum)
  26. if(!ok){
  27. fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Failed Handling Terminal : Channel Not Found.\n",conn.RemoteAddr(),chnum)
  28. return
  29. }
  30. channel,ok := chobj.(Utils.AvaliableChannel)
  31. if(!ok){
  32. 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)
  33. return
  34. }
  35. channel.Term.Write([]byte("NSMC Server Launcher V1.0 - Shell\n"))
  36. channel.Term.SetPrompt("NSMC / >")
  37. for {
  38. line,err := channel.Term.ReadLine()
  39. if( err != nil){
  40. fmt.Fprintf(&Logger.Log.SSH,"Client '%v', Channels %v, Discard. Detail: %v.\n",conn.RemoteAddr(),chnum,err)
  41. break
  42. }
  43. switch line {
  44. case "exit":
  45. clientList.Delete(conn)
  46. conn.Close()
  47. break
  48. case "about":
  49. channel.Term.Write([]byte("NSMC Server Launcher V1.0\n"))
  50. channel.Term.Write([]byte("(https://git.swzry.com/zry/NSMCServerLauncher/)\n"))
  51. channel.Term.Write([]byte("By ZRY (https://www.swzry.com/)\n\n"))
  52. break
  53. default:
  54. ExecuteCommandLine(line,channel.Term,&channel.UserContext)
  55. break;
  56. }
  57. }
  58. }