Files
2026-07-15 22:50:29 +08:00

58 lines
901 B
Go

package proxy
import (
"io"
"net/url"
"github.com/gorilla/websocket"
)
type Proxy struct {
coreURL string
}
func NewProxy(coreURL string) *Proxy {
return &Proxy{
coreURL: coreURL,
}
}
func (p *Proxy) DialCore(docID string) (*websocket.Conn, error) {
u, err := url.Parse(p.coreURL)
if err != nil {
return nil, err
}
u.Path = "/doc-" + docID
u.RawQuery = ""
coreConn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
return nil, err
}
return coreConn, nil
}
func (p *Proxy) ProxyWS(src, dst *websocket.Conn, errCh chan<- error) {
for {
msgType, r, err := src.NextReader()
if err != nil {
errCh <- err
return
}
w, err := dst.NextWriter(msgType)
if err != nil {
errCh <- err
return
}
if _, err := io.Copy(w, r); err != nil {
errCh <- err
return
}
if err := w.Close(); err != nil {
errCh <- err
return
}
}
}