moved websocket utils to separate package to allow use by the agent.
This commit is contained in:
parent
c55af94857
commit
98e46ff7cc
@ -171,7 +171,7 @@ func main() {
|
|||||||
wsConn := iowrappers.NewWebSocketConn(conn)
|
wsConn := iowrappers.NewWebSocketConn(conn)
|
||||||
defer wsConn.Close()
|
defer wsConn.Close()
|
||||||
|
|
||||||
listener, err := yamux.Client(wsConn, nil)
|
listener, err := yamux.Server(wsConn, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -3,39 +3,13 @@ package main
|
|||||||
import (
|
import (
|
||||||
"cidebug/pkg/converge"
|
"cidebug/pkg/converge"
|
||||||
"cidebug/pkg/iowrappers"
|
"cidebug/pkg/iowrappers"
|
||||||
|
"cidebug/pkg/websocketutil"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"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) {
|
func parsePublicId(path string) (publicId string, _ error) {
|
||||||
pattern := regexp.MustCompile("^/[^/]+/([^/]+)$")
|
pattern := regexp.MustCompile("^/[^/]+/([^/]+)$")
|
||||||
matches := pattern.FindStringSubmatch(path)
|
matches := pattern.FindStringSubmatch(path)
|
||||||
@ -48,8 +22,8 @@ func parsePublicId(path string) (publicId string, _ error) {
|
|||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
admin := converge.NewAdmin()
|
admin := converge.NewAdmin()
|
||||||
registrationService := WebSocketService{
|
registrationService := websocketutil.WebSocketService{
|
||||||
handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
Handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||||
publicId, err := parsePublicId(r.URL.Path)
|
publicId, err := parsePublicId(r.URL.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
||||||
@ -62,8 +36,8 @@ func main() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
clientService := WebSocketService{
|
clientService := websocketutil.WebSocketService{
|
||||||
handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
Handler: func(w http.ResponseWriter, r *http.Request, conn iowrappers.ReadWriteAddrCloser) {
|
||||||
publicId, err := parsePublicId(r.URL.Path)
|
publicId, err := parsePublicId(r.URL.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
log.Printf("Cannot parse public id from url: '%v'\n", err)
|
||||||
@ -77,8 +51,8 @@ func main() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
http.HandleFunc("/agent/", registrationService.handle)
|
http.HandleFunc("/agent/", registrationService.Handle)
|
||||||
http.HandleFunc("/client/", clientService.handle)
|
http.HandleFunc("/client/", clientService.Handle)
|
||||||
|
|
||||||
// Start HTTP server
|
// Start HTTP server
|
||||||
fmt.Println("Rendez-vous server listening on :8000")
|
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 {
|
if agent != nil {
|
||||||
return nil, fmt.Errorf("A different agent with same publicId '%s' already registered", publicId)
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
agent = NewAgent(publicId, session)
|
agent = NewAgent(publicId, clientSession)
|
||||||
admin.agents[publicId] = agent
|
admin.agents[publicId] = agent
|
||||||
admin.logStatus()
|
admin.logStatus()
|
||||||
return agent, nil
|
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