// package store_net -- реализация сетевого хранилища package store_net import ( "fmt" "github.com/sirupsen/logrus" "wartank/pkg/types" ) // StoreNet -- реализвция сетевого хранилища type StoreNet struct { desktop types.IDesktop ws types.IWebSocket } // NewStoreNet -- возвращает новый объект сетевого хранилища func NewStoreNet(desktop types.IDesktop) (*StoreNet, error) { logrus.Infof("NewStoreNet()") if desktop == nil { return nil, fmt.Errorf("NewStoreNet(): IDesktop = =nil") } sf := &StoreNet{ desktop: desktop, ws: desktop.Ws(), } return sf, nil } // Find -- поиск объекта в хранилище func (sf *StoreNet) Find(prefix string) (map[string]string, error) { logrus.Debugf("StoreNet.Find()") mapReq := make(map[string]string) mapReq["cmd"] = "/store/find" mapReq["key"] = prefix dictResp, err := sf.ws.Call("/store/find", mapReq) if err != nil { return nil, fmt.Errorf("StoreNet.Find(): in write StoreNet, err=\n\t%w", err) } strErr := dictResp["err"] if strErr != "" { return nil, fmt.Errorf("StoreNet.Find(): in response, err=\n\t%v", strErr) } return dictResp, nil } // Get -- получает содержимое записи по ключу func (sf *StoreNet) Get(key string) (string, error) { logrus.Debugf("StoreNet.Get()") dictResp, err := sf.ws.Read(key) if err != nil { return "", fmt.Errorf("StoreNet.Get(): in read StoreNet, err=\n\t%w", err) } strErr := dictResp["err"] if string(strErr) != "" { return "", fmt.Errorf("StoreNet.Get(): in response, err=\n\t%v", strErr) } strResp := dictResp["res"] return strResp, nil } // Put -- помещает запись в хранилище func (sf *StoreNet) Put(key string, val string) error { logrus.Debugf("StoreNet.Put()") dictReq := make(map[string]string) dictReq["key"] = key dictReq["val"] = val err := sf.ws.Write("/store/put", dictReq) if err != nil { return fmt.Errorf("StoreNet.Get(): in write StoreNet, err=\n\t%w", err) } return nil }