client_serv.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. }
  14. // NewClientServ -- возвращает новый клиент к бото-серверу
  15. func NewClientServ() *ClientServ {
  16. sf := &ClientServ{}
  17. return sf
  18. }
  19. // Connect -- подключает клиента к бото-серверу
  20. func (sf *ClientServ) Connect(url_ string) error {
  21. sf.url = url_
  22. var err error
  23. sf.client, err = rpc.DialHTTP("tcp", url_)
  24. if err != nil {
  25. return fmt.Errorf("ClientSrv.Connect(): in connect to bot-server, err=\n\t%w", err)
  26. }
  27. req := &serv_rpc.EchoReq{}
  28. resp := &serv_rpc.EchoResp{}
  29. err = sf.client.Call("ServRpc.Echo", req, &resp)
  30. if err != nil {
  31. return fmt.Errorf("ClientServ.Connect(): in make Echo-request to bot-server, err=\n\t%w", err)
  32. }
  33. if resp.Result != "WarTank!" {
  34. return fmt.Errorf("ClientServ.Connect(): bad response on Echo request(%v!='WarTank!')", resp.Result)
  35. }
  36. return nil
  37. }
  38. // Login -- логинится на сервер
  39. func (sf *ClientServ) Login(login, pass string) error {
  40. log.Println("ClientServ.Login()")
  41. req := &serv_rpc.LoginReq{
  42. Login: login,
  43. Pass: pass,
  44. }
  45. resp := &serv_rpc.LoginResp{}
  46. err := sf.client.Call("ServRpc.Login", req, resp)
  47. if err != nil {
  48. return fmt.Errorf("ClientServ.Login(): err=\n\t%w", err)
  49. }
  50. if resp.Result != "ok" {
  51. return fmt.Errorf("ClientServ.Login(): resp=%q", resp.Result)
  52. }
  53. return nil
  54. }
  55. // MakeAdmin -- создаёт админа на сервере
  56. func (sf *ClientServ) MakeAdmin(pass string) error {
  57. log.Println("ClientServ.MakeAdmin()")
  58. req := &serv_rpc.MakeAdminReq{
  59. Pass: pass,
  60. }
  61. resp := &serv_rpc.MakeAdminResp{}
  62. err := sf.client.Call("ServRpc.MakeAdmin", req, resp)
  63. if err != nil {
  64. return fmt.Errorf("ClientServ.MakeAdmin(): in make request, err=\n\t%w", err)
  65. }
  66. return nil
  67. }