script.js
//
document.getElementById("message").addEventListener("keydown", function(event){
if (event.code === "Enter"){
if(!socket){
console.log("no connection")
return false
}
event.preventDefault()
event.stopPropagation()
sendMessage()
}
})
//
function sendMessage(){
console.log("Send Message...")
let jsonData = {}
jsonData["action"] = "broadcast"
jsonData["username"] = document.getElementById("username").value
jsonData["message"] = document.getElementById("message").value
socket.send(JSON.stringify(jsonData))
document.getElementById("message").value = ""
}
html
<button id="submit" class="submit" onclick="sendMessage()"> <i class="far far-paper-plane"></i> </button>
handler.go
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)
case "broadcast":
response.Action = "broadcast"
response.Message = fmt.Sprintf(
"<li class='replace'><strong>%s</strong>: %s</li>",
e.Username,
e.Message)
broadcastToAll(response)
}
}
}
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
case "broadcast":
let message = data.message
let username = document.getElementById("username").value
if (message.indexOf(username) > 0){
message = message.replace("replace", "me")
} else {
message = message.replace("replace", "other")
}
messageList.innerHTML = messageList.innerHTML + message
break
}
}

おおおおおおおおお、これは凄い
あとはrevelでやってfrontを書くか