From fac6cc44956d222d6d4821f0bee4946597c80b48 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Sat, 9 Apr 2022 10:26:37 +0300 Subject: [PATCH] Generate xIds on the worker's side --- pkg/coordinator/handlers.go | 8 +++++++- pkg/cws/api/coordinator.go | 1 + pkg/worker/handlers.go | 2 ++ web/css/ui.css | 2 +- web/js/workerManager.js | 10 ++++++++-- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/pkg/coordinator/handlers.go b/pkg/coordinator/handlers.go index 2adde404..911d4fa0 100644 --- a/pkg/coordinator/handlers.go +++ b/pkg/coordinator/handlers.go @@ -98,7 +98,13 @@ func (s *Server) WSO(w http.ResponseWriter, r *http.Request) { // Create a workerClient instance wc := NewWorkerClient(c, workerID) wc.Println("Generated worker ID") - wc.Id = xid.New() + if connRt.Xid != "" { + if wc.Id, err = xid.FromString(connRt.Xid); err != nil { + wc.Id = xid.New() + } + } else { + wc.Id = xid.New() + } wc.Addr = connRt.Addr wc.Zone = connRt.Zone wc.PingServer = connRt.PingURL diff --git a/pkg/cws/api/coordinator.go b/pkg/cws/api/coordinator.go index a2530d9f..ecf3e287 100644 --- a/pkg/cws/api/coordinator.go +++ b/pkg/cws/api/coordinator.go @@ -58,6 +58,7 @@ type ConnectionRequest struct { Port string `json:"port,omitempty"` Tag string `json:"tag,omitempty"` Zone string `json:"zone,omitempty"` + Xid string `json:"xid,omitempty"` } type GetServerListRequest struct{} diff --git a/pkg/worker/handlers.go b/pkg/worker/handlers.go index f606ae2b..8b114ddc 100644 --- a/pkg/worker/handlers.go +++ b/pkg/worker/handlers.go @@ -18,6 +18,7 @@ import ( "github.com/giongto35/cloud-game/v2/pkg/storage" "github.com/giongto35/cloud-game/v2/pkg/webrtc" "github.com/giongto35/cloud-game/v2/pkg/worker/room" + "github.com/rs/xid" ) type Handler struct { @@ -136,6 +137,7 @@ func MakeConnectionRequest(w worker.Worker, address string) (string, error) { Port: w.GetPort(address), Tag: w.Tag, Zone: w.Network.Zone, + Xid: xid.New().String(), } rez, err := json.Marshal(req) if err != nil { diff --git a/web/css/ui.css b/web/css/ui.css index 989271a0..0a0ca00c 100644 --- a/web/css/ui.css +++ b/web/css/ui.css @@ -146,7 +146,7 @@ .server-list div { display: grid; - grid-template-columns: .2fr 2.2fr 1fr .5fr .2fr; + grid-template-columns: .2fr 1.2fr 1fr .5fr .2fr; justify-items: start; diff --git a/web/js/workerManager.js b/web/js/workerManager.js index c1c40c80..38b6e447 100644 --- a/web/js/workerManager.js +++ b/web/js/workerManager.js @@ -19,11 +19,11 @@ const workerManager = (() => { // renderer -- an arbitrary DOM output for the field list = { 'n': { - renderer: () => String(index.v()).padStart(2, '0') + renderer: renderIdEl }, 'id': { caption: 'ID', - renderer: (data) => data?.id ? data.xid : `${data.xid} [replicated] x ${data['replicas']}` + renderer: (data) => data?.id ? data.xid : `${data.xid} x ${data['replicas']}` }, 'addr': { caption: 'Address', @@ -88,6 +88,12 @@ const workerManager = (() => { socket.getServerList(); } + function renderIdEl(server) { + const id = String(index.v()).padStart(2, '0'); + const isActive = server?.id && state.lastId && state.lastId === server?.xid + return `${(isActive ? '>' : '')}${id}` + } + function renderServerChangeEl(server) { const handleServerChange = (e) => { e.preventDefault();