usernameをserver側に送る
script.js
let userInput = document.getElementById("username") userInput.addEventListener("change", function(){ let jsonData = {} jsonData["action"] = "username" jsonData["username"] = this.value; socket.send(JSON.stringify(jsonData)) })
handlers.go
func getUserList() []string { var clientList []string for _, client := range clients { if client != "" { clientList = append(clientList, client) } } sort.Strings(clientList) return clientList }
connect.go
type WsJsonResponse struct { Action string `json:"action"` Message string `json:"message"` ConnectedUsers []string `json:"connected_users"` }
script.js
socket.onmessage = msg => { let data = JSON.parse(msg.data) console.log({data}) console.log("Action is", data.action) switch(data.action){ case "list_users": let ul = document.getElementById("online-users") while (ul.firstChild) ul.removeChild(ul.firstChild) if (data.connected_users.length > 0){ data.connected_users.forEach(function(item){ let li = document.createElement("li") li.appendChild(document.createTextNode(item)) ul.appendChild(li) }) } break } }
script.js
window.onbeforeunload = function(){ console.log("User Leaving") let jsonData = {} jsonData["action"] = "left" socket.send(JSON.stringify(jsonData)) }
func ListenToWsChannel(){ var response domain.WsJsonResponse for { e := <-wsChan switch e.Action { case "username": clients[e.Conn] = e.Username users := getUserList() response.Action = "list_users" response.ConnectedUsers = users broadcastToAll(response) case "left": response.Action = "list_users" delete(clients, e.Conn) users := getUserList() response.ConnectedUsers = users broadcastToAll(response) } } }
ちょっとこんがらがってきました。