moved websocket utils to separate package to allow use by the agent.
This commit is contained in:
parent
6857eb6ff9
commit
3e6ec05877
@ -171,7 +171,7 @@ func main() {
|
||||
wsConn := iowrappers.NewWebSocketConn(conn)
|
||||
defer wsConn.Close()
|
||||
|
||||
listener, err := yamux.Client(wsConn, nil)
|
||||
listener, err := yamux.Server(wsConn, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -3,39 +3,13 @@ package main
|
||||
import (
|
||||
"cidebug/pkg/converge"
|
||||
"cidebug/pkg/iowrappers"
|
||||
"cidebug/pkg/websocketutil"
|
||||
"fmt"
|
||||
"github.com/gorilla/websocket"
|
||||
"log"
|
||||
"net/http"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
WriteBufferSize: 1024,
|
||||
}
|
||||
|
||||
func handleWebSocket(w http.ResponseWriter, r *http.Request,
|
||||
handler func(w http.ResponseWriter, r *http.Request, websockerConnection iowrappers.ReadWriteAddrCloser)) {
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Println("Error upgrading to WebSocket:", err)
|
||||
return
|
||||
}
|
||||
wsConn := iowrappers.NewWebSocketConn(conn)
|
||||
defer wsConn.Close()
|
||||
|
||||
handler(w, r, wsConn)
|
||||
}
|
||||
|
||||
type WebSocketService struct {
|
||||
handler func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser)
|
||||
}
|
||||
|
||||
func (endpoint *WebSocketService) handle(w http.ResponseWriter, r *http.Request) {
|
||||
handleWebSocket(w, r, endpoint.handler)
|
||||
}
|
||||
|
||||
func parsePublicId(path string) (publicId string, _ error) {
|
||||
pattern := regexp.MustCompile("^/[^/]+/([^/]+)$")
|
||||
matches := pattern.FindStringSubmatch(path)
|
||||
@ -48,8 +22,8 @@ func parsePublicId(path string) (publicId string, _ error) {
|
||||
func main() {
|
||||
|
||||
admin := converge.NewAdmin()
|
||||
registrationService := WebSocketService{
|
||||
handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||
registrationService := websocketutil.WebSocketService{
|
||||
Handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||
publicId, err := parsePublicId(r.URL.Path)
|
||||
if err != nil {
|
||||
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
||||
@ -62,8 +36,8 @@ func main() {
|
||||
}
|
||||
},
|
||||
}
|
||||
clientService := WebSocketService{
|
||||
handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||
clientService := websocketutil.WebSocketService{
|
||||
Handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||
publicId, err := parsePublicId(r.URL.Path)
|
||||
if err != nil {
|
||||
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
||||
@ -77,8 +51,8 @@ func main() {
|
||||
},
|
||||
}
|
||||
|
||||
http.HandleFunc("/agent/", registrationService.handle)
|
||||
http.HandleFunc("/client/", clientService.handle)
|
||||
http.HandleFunc("/agent/", registrationService.Handle)
|
||||
http.HandleFunc("/client/", clientService.Handle)
|
||||
|
||||
// Start HTTP server
|
||||
fmt.Println("Rendez-vous server listening on :8000")
|
||||
|
@ -85,11 +85,12 @@ func (admin *Admin) addAgent(publicId string, conn io.ReadWriteCloser) (*Agent,
|
||||
if agent != nil {
|
||||
return nil, fmt.Errorf("A different agent with same publicId '%s' already registered", publicId)
|
||||
}
|
||||
session, err := yamux.Client(conn, nil)
|
||||
|
||||
clientSession, err := yamux.Client(conn, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
agent = NewAgent(publicId, session)
|
||||
agent = NewAgent(publicId, clientSession)
|
||||
admin.agents[publicId] = agent
|
||||
admin.logStatus()
|
||||
return agent, nil
|
||||
|
34
pkg/websocketutil/services.go
Normal file
34
pkg/websocketutil/services.go
Normal file
@ -0,0 +1,34 @@
|
||||
package websocketutil
|
||||
|
||||
import (
|
||||
"cidebug/pkg/iowrappers"
|
||||
"github.com/gorilla/websocket"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
WriteBufferSize: 1024,
|
||||
}
|
||||
|
||||
func handleWebSocket(w http.ResponseWriter, r *http.Request,
|
||||
handler func(w http.ResponseWriter, r *http.Request, websockerConnection iowrappers.ReadWriteAddrCloser)) {
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Println("Error upgrading to WebSocket:", err)
|
||||
return
|
||||
}
|
||||
wsConn := iowrappers.NewWebSocketConn(conn)
|
||||
defer wsConn.Close()
|
||||
|
||||
handler(w, r, wsConn)
|
||||
}
|
||||
|
||||
type WebSocketService struct {
|
||||
Handler func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser)
|
||||
}
|
||||
|
||||
func (endpoint *WebSocketService) Handle(w http.ResponseWriter, r *http.Request) {
|
||||
handleWebSocket(w, r, endpoint.Handler)
|
||||
}
|
Loading…
Reference in New Issue
Block a user