mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-20 11:45:53 +00:00
Implement snapshot import cmd `clio_snapshot --server --grpc_server 0.0.0.0:12345 --path <snapshot_path>` Implement snapshot range cmd `./clio_snapshot --range --path <snapshot_path>` Add LedgerHouses: It is responsible for reading/writing snapshot data Server: Start grpc server and ws server
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package server
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/websocket"
|
|
)
|
|
|
|
type WebSocketServer struct {
|
|
serverName string
|
|
callback func(message string) string
|
|
upgrader websocket.Upgrader
|
|
}
|
|
|
|
func NewWebSocketServer(serverName string, callback func(message string) string) *WebSocketServer {
|
|
return &WebSocketServer{
|
|
serverName: serverName,
|
|
callback: callback,
|
|
upgrader: websocket.Upgrader{
|
|
CheckOrigin: func(r *http.Request) bool { return true }, // Allow all connections
|
|
},
|
|
}
|
|
}
|
|
|
|
func (ws *WebSocketServer) handleConnections() http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
conn, err := ws.upgrader.Upgrade(w, r, nil)
|
|
if err != nil {
|
|
log.Printf("[%s] Error upgrading to WebSocket: %v", ws.serverName, err)
|
|
return
|
|
}
|
|
defer conn.Close()
|
|
|
|
log.Printf("[%s] New WebSocket connection established", ws.serverName)
|
|
|
|
for {
|
|
_, msg, err := conn.ReadMessage()
|
|
if err != nil {
|
|
log.Printf("[%s] Error reading message: %v", ws.serverName, err)
|
|
break
|
|
}
|
|
log.Printf("[%s] Received: %s", ws.serverName, msg)
|
|
|
|
response := ws.callback(string(msg))
|
|
|
|
err = conn.WriteMessage(websocket.TextMessage, []byte(response))
|
|
log.Printf("[%s] Sending: %s", ws.serverName, response)
|
|
if err != nil {
|
|
log.Printf("[%s] Error writing message: %v", ws.serverName, err)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (ws *WebSocketServer) Start(address string) {
|
|
http.HandleFunc("/", ws.handleConnections())
|
|
log.Printf("[%s] Starting ws server on address: %s", ws.serverName, address)
|
|
err := http.ListenAndServe(address, nil)
|
|
if err != nil {
|
|
log.Fatalf("[%s] Server failed: %v", ws.serverName, err)
|
|
}
|
|
}
|