1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-09 17:45:03 +09:00
any-sync/commonspace/sync/synctest/connprovider.go
2024-06-06 00:37:01 +02:00

36 lines
773 B
Go

package synctest
import (
"sync"
"github.com/anyproto/any-sync/net/rpc/rpctest"
"github.com/anyproto/any-sync/net/transport"
)
type ConnProvider struct {
sync.Mutex
multiConns map[string]transport.MultiConn
}
func (c *ConnProvider) GetConn(firstId, secondId string) (conn transport.MultiConn) {
c.Lock()
defer c.Unlock()
id := mapId(firstId, secondId)
if conn, ok := c.multiConns[id]; ok {
return conn
}
first, second := rpctest.MultiConnPair(firstId, secondId)
c.multiConns[id] = second
c.multiConns[mapId(secondId, firstId)] = first
return second
}
func NewConnProvider() *ConnProvider {
return &ConnProvider{
multiConns: make(map[string]transport.MultiConn),
}
}
func mapId(firstId, secondId string) string {
return firstId + "-" + secondId
}