converge/pkg/iowrappers/io.go
Erik Brakkee cfccf04f9d working server
* administration appears coorect
* multiple clients for one agent
* logging of active connections
* simple echo server on the agent.
2024-07-20 13:35:49 +02:00

54 lines
1.0 KiB
Go

package iowrappers
import (
"github.com/gorilla/websocket"
"io"
"net"
)
type WebSocketConn struct {
conn *websocket.Conn
buf []byte
}
type ReadWriteAddrCloser interface {
io.ReadWriteCloser
RemoteAddr() net.Addr
}
func (websocketConn *WebSocketConn) Read(p []byte) (n int, err error) {
if len(websocketConn.buf) == 0 {
_, message, err := websocketConn.conn.ReadMessage()
if err != nil {
return 0, err
}
websocketConn.buf = message
}
n = copy(p, websocketConn.buf)
websocketConn.buf = websocketConn.buf[n:]
return n, err
}
func NewWebSocketConn(conn *websocket.Conn) *WebSocketConn {
return &WebSocketConn{conn: conn}
}
func (websocketConn *WebSocketConn) Write(p []byte) (n int, err error) {
err = websocketConn.conn.WriteMessage(websocket.BinaryMessage, p)
if err == nil {
n = len(p)
}
return n, err
}
func (websocketConn *WebSocketConn) Close() error {
return websocketConn.conn.Close()
}
func (websocketConn *WebSocketConn) RemoteAddr() net.Addr {
return websocketConn.conn.RemoteAddr()
}