// package client_serv -- клиент подключения к бото-серверу package client_serv import ( "fmt" "log" "net/rpc" "wartank/server/serv_rpc" ) // ClientServ -- клиент подключения к бото-серверу type ClientServ struct { client *rpc.Client url string } // NewClientServ -- возвращает новый клиент к бото-серверу func NewClientServ() *ClientServ { sf := &ClientServ{} return sf } // Connect -- подключает клиента к бото-серверу func (sf *ClientServ) Connect(url_ string) error { sf.url = url_ var err error sf.client, err = rpc.DialHTTP("tcp", url_) if err != nil { return fmt.Errorf("ClientSrv.Connect(): in connect to bot-server, err=\n\t%w", err) } req := &serv_rpc.EchoReq{} resp := &serv_rpc.EchoResp{} err = sf.client.Call("ServRpc.Echo", req, &resp) if err != nil { return fmt.Errorf("ClientServ.Connect(): in make Echo-request to bot-server, err=\n\t%w", err) } if resp.Result != "WarTank!" { return fmt.Errorf("ClientServ.Connect(): bad response on Echo request(%v!='WarTank!')", resp.Result) } return nil } // Login -- логинится на сервер func (sf *ClientServ) Login(login, pass string) error { log.Println("ClientServ.Login()") req := &serv_rpc.LoginReq{ Login: login, Pass: pass, } resp := &serv_rpc.LoginResp{} err := sf.client.Call("ServRpc.Login", req, resp) if err != nil { return fmt.Errorf("ClientServ.Login(): err=\n\t%w", err) } if resp.Result != "ok" { return fmt.Errorf("ClientServ.Login(): resp=%q", resp.Result) } return nil } // MakeAdmin -- создаёт админа на сервере func (sf *ClientServ) MakeAdmin(pass string) error { log.Println("ClientServ.MakeAdmin()") req := &serv_rpc.MakeAdminReq{ Pass: pass, } resp := &serv_rpc.MakeAdminResp{} err := sf.client.Call("ServRpc.MakeAdmin", req, resp) if err != nil { return fmt.Errorf("ClientServ.MakeAdmin(): in make request, err=\n\t%w", err) } return nil }