first rendez vous:
1. two websocket clients connecting: one as agent and one as client 2. bidirectional communication between the two
This commit is contained in:
		
							parent
							
								
									ada8dee0aa
								
							
						
					
					
						commit
						f59c8368ea
					
				
							
								
								
									
										73
									
								
								cmd/converge/server.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								cmd/converge/server.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"cidebug/pkg/iowrappers" | ||||
| 	"fmt" | ||||
| 	"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.WebSocketConn)) { | ||||
| 	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.WebSocketConn) | ||||
| } | ||||
| 
 | ||||
| func (endpoint *WebSocketService) handle(w http.ResponseWriter, r *http.Request) { | ||||
| 	handleWebSocket(w, r, endpoint.handler) | ||||
| } | ||||
| 
 | ||||
| var client *iowrappers.WebSocketConn | ||||
| var agent *iowrappers.WebSocketConn | ||||
| 
 | ||||
| func main() { | ||||
| 	// Connect to TCP server
 | ||||
| 
 | ||||
| 	clientClosed := make(chan bool) | ||||
| 	serverAvailable := make(chan bool) | ||||
| 
 | ||||
| 	registrationService := WebSocketService{ | ||||
| 		handler: func(w http.ResponseWriter, r *http.Request, conn *iowrappers.WebSocketConn) { | ||||
| 			log.Println("Got registration connection") | ||||
| 			agent = conn | ||||
| 			serverAvailable <- true | ||||
| 			<-clientClosed | ||||
| 		}, | ||||
| 	} | ||||
| 	clientService := WebSocketService{ | ||||
| 		handler: func(w http.ResponseWriter, r *http.Request, conn *iowrappers.WebSocketConn) { | ||||
| 			log.Println("Got client connection") | ||||
| 			client = conn | ||||
| 			if agent == nil { | ||||
| 				log.Println("There is no agent yet,, closing") | ||||
| 				return | ||||
| 			} | ||||
| 			iowrappers.SynchronizeStreams(client, agent) | ||||
| 			clientClosed <- true | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	http.HandleFunc("/register", registrationService.handle) | ||||
| 	http.HandleFunc("/client", clientService.handle) | ||||
| 
 | ||||
| 	// Start HTTP server
 | ||||
| 	fmt.Println("WebSocket server listening on :8000") | ||||
| 	log.Fatal(http.ListenAndServe(":8000", nil)) | ||||
| } | ||||
| @ -5,25 +5,33 @@ import ( | ||||
| 	"github.com/gorilla/websocket" | ||||
| 	"log" | ||||
| 	"net" | ||||
| 	"os" | ||||
| ) | ||||
| 
 | ||||
| func handleConnection(tcpConn net.Conn, wsURL string) { | ||||
| 	defer tcpConn.Close() | ||||
| func closeConnection(conn net.Conn) { | ||||
| 	if tcpConn, ok := conn.(*net.TCPConn); ok { | ||||
| 		tcpConn.SetLinger(0) | ||||
| 	} | ||||
| 	_ = conn.Close() | ||||
| } | ||||
| 
 | ||||
| 	conn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) | ||||
| 	wsConn := iowrappers.NewWebSocketConn(conn) | ||||
| func handleConnection(conn net.Conn, wsURL string) { | ||||
| 	defer closeConnection(conn) | ||||
| 
 | ||||
| 	_wsConn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) | ||||
| 	if err != nil { | ||||
| 		log.Println("WebSocket connection error:", err) | ||||
| 		return | ||||
| 	} | ||||
| 	wsConn := iowrappers.NewWebSocketConn(_wsConn) | ||||
| 	defer wsConn.Close() | ||||
| 
 | ||||
| 	iowrappers.SynchronizeStreams(wsConn, tcpConn) | ||||
| 	iowrappers.SynchronizeStreams(wsConn, conn) | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| 	tcpPort := "7000" | ||||
| 	wsURL := "ws://localhost:8000/ws" // Replace with your WebSocket server URL
 | ||||
| 	tcpPort := os.Args[1] | ||||
| 	wsURL := os.Args[2] | ||||
| 
 | ||||
| 	listener, err := net.Listen("tcp", ":"+tcpPort) | ||||
| 	if err != nil { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user