package comms import ( "fmt" "github.com/hashicorp/yamux" "io" "net" ) type CommChannel struct { Peer net.Conn Session *yamux.Session } type Role int const ( Agent Role = iota ConvergeServer ) func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) { switch role { case Agent: listener, err := yamux.Server(wsConn, nil) if err != nil { return CommChannel{}, err } return CommChannel{ Peer: nil, Session: listener, }, nil case ConvergeServer: clientSession, err := yamux.Client(wsConn, nil) if err != nil { return CommChannel{}, err } return CommChannel{ Peer: nil, Session: clientSession, }, nil } return CommChannel{}, fmt.Errorf("Undefined role %d", role) }