client_serv.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. }