45 lines
748 B
Go
45 lines
748 B
Go
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)
|
|
}
|