| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // package dict_client_proxy_buffer -- словарь буферизованных клиентов
- //
- // Способен переживать отключения клиентов и накапливать информацию по необходимости
- package dict_client_proxy_buffer
- import (
- "fmt"
- "sync"
- "p78git.ddns.net/svi/gobus/api/netapi"
- "p78git.ddns.net/svi/gobus/pkg/alias"
- "p78git.ddns.net/svi/gobus/pkg/net/client_proxy_buffer"
- "p78git.ddns.net/svi/gobus/pkg/types"
- )
- // DictClientProxyBuffer -- словарь буферизованных клиентов
- //
- // Способен переживать отключения клиентов и накапливать информацию по необходимости
- type DictClientProxyBuffer struct {
- serv types.IService
- dictTopic types.IDictTopic
- dict map[alias.ClientName]types.IClientProxyBuffer
- block sync.RWMutex
- }
- // NewDictClientProxyBuffer -- возвращает новый словарь буферизованных клиентов
- func NewDictClientProxyBuffer(serv types.IService) (*DictClientProxyBuffer, error) {
- if serv == nil {
- return nil, fmt.Errorf("NewDictClientProxyBuffer(): IService==nil")
- }
- sf := &DictClientProxyBuffer{
- serv: serv,
- dictTopic: serv.DictTopic(),
- dict: make(map[alias.ClientName]types.IClientProxyBuffer),
- }
- _ = types.IDictClientProxyBuffer(sf)
- return sf, nil
- }
- // Add -- добавляет нового буферизованного клиента в словарь
- func (sf *DictClientProxyBuffer) Add(req *netapi.BuffRequest) (types.IClientProxyBuffer, error) {
- sf.block.Lock()
- defer sf.block.Unlock()
- clientProxyBuff, err := client_proxy_buffer.NewClientProxyBuffer(req)
- if err != nil {
- return nil, fmt.Errorf("DictClientProxyBuffer.Add(): in create ClientProxyBuffer(): err=\n\t%w", err)
- }
- sf.dict[clientProxyBuff.ClientName()] = clientProxyBuff
- // Отправить в словарь топиков на подписку
- sf.dictTopic.Subscribe(clientProxyBuff)
- return clientProxyBuff, nil
- }
|