mangekyo.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package hhc_mangekyo
  2. import (
  3. "context"
  4. "fmt"
  5. "git.swzry.com/zry/go-hhc-cli/hhc_telws"
  6. "git.swzry.com/zry/go-hhc-cli/hhccli"
  7. )
  8. type MangekyoHandlerFactory struct {
  9. uhdl MangekyoUserLogicHandler
  10. mh *MangekyoHandler
  11. }
  12. type MangekyoHandler struct {
  13. fact *MangekyoHandlerFactory
  14. }
  15. func NewMangekyoHandlerFactory(handler MangekyoUserLogicHandler) *MangekyoHandlerFactory {
  16. mhf := &MangekyoHandlerFactory{
  17. uhdl: handler,
  18. }
  19. mhf.mh = &MangekyoHandler{
  20. fact: mhf,
  21. }
  22. return mhf
  23. }
  24. func (mhf *MangekyoHandlerFactory) GetSessionHandler() hhc_telws.TelwsSessionHandler {
  25. return mhf.mh
  26. }
  27. func (mh *MangekyoHandler) HandleConnection(ctx *hhc_telws.TelwsSessionContext) error {
  28. rw := ctx.GetReadWriter()
  29. dtitle := mh.fact.uhdl.GetDefaultTitle(ctx)
  30. _, _ = fmt.Fprintf(rw, "\033]0;%s\007", dtitle)
  31. _, _ = fmt.Fprintf(rw, "Welcome, %s.\r\n", ctx.GetUsername())
  32. cfg := hhccli.TerminalInteractiveConfig{
  33. InputStream: rw,
  34. OutputStream: rw,
  35. ErrorStream: rw,
  36. InitialTerminalWidth: 80,
  37. DebugLogFunction: func(lv hhccli.TerminalInteractiveDebugLogLevel, msg ...interface{}) {
  38. },
  39. InitialPrompt: mh.fact.uhdl.GetDefaultPromptString(ctx),
  40. BackspaceRune: '\x7F',
  41. }
  42. cli := hhccli.NewTerminalInteractive(cfg)
  43. rctx := context.Background()
  44. cvps := mh.fact.uhdl.GetCustomViewPortalCommands()
  45. uv := NewMangeKyoUserView(ctx, cvps, cli)
  46. cli.RegisterView("entry", uv)
  47. err := mh.fact.uhdl.NewSession(ctx, cli)
  48. if err != nil {
  49. return err
  50. }
  51. err = cli.SetCurrentView("entry")
  52. if err != nil {
  53. return err
  54. }
  55. err = cli.Run(rctx)
  56. return err
  57. }