client_serv.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // package client_serv -- клиент подключения к бото-серверу
  2. package client_serv
  3. import (
  4. "fmt"
  5. "log"
  6. "net/rpc"
  7. "wartank/server/serv_rpc"
  8. )
  9. // ClientServ -- клиент подключения к бото-серверу
  10. type ClientServ struct {
  11. client *rpc.Client
  12. url string
  13. login string // Логин на бото-ферму
  14. pass string // Логин на бото-ферму
  15. }
  16. // NewClientServ -- возвращает новый клиент к бото-серверу
  17. func NewClientServ() *ClientServ {
  18. sf := &ClientServ{}
  19. return sf
  20. }
  21. // Connect -- подключает клиента к бото-серверу
  22. func (sf *ClientServ) Connect(url_ string) error {
  23. sf.url = url_
  24. var err error
  25. sf.client, err = rpc.DialHTTP("tcp", url_)
  26. if err != nil {
  27. return fmt.Errorf("ClientSrv.Connect(): in connect to bot-server, err=\n\t%w", err)
  28. }
  29. req := &serv_rpc.EchoReq{}
  30. resp := &serv_rpc.EchoResp{}
  31. err = sf.client.Call("ServRpc.Echo", req, &resp)
  32. if err != nil {
  33. return fmt.Errorf("ClientServ.Connect(): in make Echo-request to bot-server, err=\n\t%w", err)
  34. }
  35. if resp.Result != "WarTank!" {
  36. return fmt.Errorf("ClientServ.Connect(): bad response on Echo request(%v!='WarTank!')", resp.Result)
  37. }
  38. return nil
  39. }
  40. // Login -- логинится на сервер
  41. func (sf *ClientServ) Login(login, pass string) error {
  42. log.Println("ClientServ.Login()")
  43. req := &serv_rpc.LoginReq{
  44. Login: login,
  45. Pass: pass,
  46. }
  47. resp := &serv_rpc.LoginResp{}
  48. err := sf.client.Call("ServRpc.Login", req, resp)
  49. if err != nil {
  50. return fmt.Errorf("ClientServ.Login(): err=\n\t%w", err)
  51. }
  52. if resp.Result != "ok" {
  53. return fmt.Errorf("ClientServ.Login(): resp=%q", resp.Result)
  54. }
  55. sf.login = login
  56. sf.pass = pass
  57. return nil
  58. }
  59. // AddBot -- добавляет бота на сервер
  60. func (sf *ClientServ) AddBot(login, pass string) error {
  61. log.Println("ClientServ.AddBot()")
  62. req := &serv_rpc.AddBotReq{
  63. Login: sf.login,
  64. Pass: sf.pass,
  65. BotLogin: login,
  66. BotPass: pass,
  67. }
  68. resp := &serv_rpc.AddBotResp{}
  69. err := sf.client.Call("ServRpc.AddBot", req, resp)
  70. if err != nil {
  71. return fmt.Errorf("ClientServ.AddBot(): err=\n\t%w", err)
  72. }
  73. if resp.Result != "ok" {
  74. return fmt.Errorf("ClientServ.AddBot(): resp=%q", resp.Result)
  75. }
  76. return nil
  77. }