Generate xIds on the worker's side

This commit is contained in:
Sergey Stepanov 2022-04-09 10:26:37 +03:00
parent 59c3d4a6c7
commit fac6cc4495
No known key found for this signature in database
GPG key ID: A56B4929BAA8556B
5 changed files with 19 additions and 4 deletions

View file

@ -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

View file

@ -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{}

View file

@ -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 {

View file

@ -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;

View file

@ -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();