| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // package serv_rpc -- сервер RPC-запросов
- package serv_rpc
- import (
- "fmt"
- "log"
- "net"
- "net/http"
- "net/rpc"
- "os"
- "wartank/pkg/types"
- )
- type ServRpc struct {
- serv types.IServer
- }
- // NewServRpc -- возвращает новый сервер RPC-запросов
- func NewServRpc(serv types.IServer) (*ServRpc, error) {
- if serv == nil {
- return nil, fmt.Errorf("NewServRpc(): IServer==nil")
- }
- sf := &ServRpc{
- serv: serv,
- }
- return sf, nil
- }
- // Run -- запускает сервис в работу
- func (sf *ServRpc) Run() {
- rpc.Register(sf)
- rpc.HandleHTTP()
- url := os.Getenv("SERVER_RPC_URL")
- if url == "" {
- log.Printf("ServRpc.Run(): env SERVER_RPC_URL not set\n")
- return
- }
- log.Printf("SERVER_RPC_URL=%v\n", url)
- lister, err := net.Listen("tcp", url)
- if err != nil {
- log.Printf("NewServRc(): listen error, err=\n\t%v\n", err)
- sf.serv.CancelApp()
- return
- }
- go http.Serve(lister, nil)
- }
- // EchoReq -- эхо запрос на сервер
- type EchoReq struct{}
- // EchoResp -- эхо ответ на запрос
- type EchoResp struct {
- Result string
- }
- // Echo -- эхо запрос для клиента
- func (sf *ServRpc) Echo(req *EchoReq, resp *EchoResp) error {
- log.Println("ServRpc.Echo()")
- resp.Result = "WarTank!"
- return nil
- }
- // LoginReq -- запрос на логин на сервер
- type LoginReq struct {
- Login string
- Pass string
- }
- // LoginResp -- ответ на запрос логина
- //
- // Вернёт ошибку если:
- // 1. Нужно создать админа
- // 2. Неверная пара логин/пароль
- type LoginResp struct {
- Result string
- }
- // Login -- запросвхода на сервер
- func (sf *ServRpc) Login(req *LoginReq, resp *LoginResp) error {
- log.Println("ServRpc.Login()")
- store := sf.serv.Store()
- binData, err := store.Get("/users/" + req.Login)
- if err != nil {
- return fmt.Errorf("ServRpc.Login(): bad account")
- }
- strPass := string(binData)
- if req.Pass != strPass {
- return fmt.Errorf("ServRpc.Login(): bad account")
- }
- resp.Result = "ok"
- return nil
- }
|