go-websockets-talk/code/hub.go

58 lines
1.0 KiB
Go

package main
import (
"strings"
"time"
"github.com/gorilla/websocket"
)
type message struct {
Sender string `json:"sender"`
Content string `json:"content"`
Date time.Time `json:"date"`
}
func (m message) dispatch() {
for client := range connections {
client.WriteJSON(m)
}
}
var connections = make(map[*websocket.Conn]string)
func sendChatMessage(sender *websocket.Conn, msg string) {
m := message{
Sender: connections[sender],
Content: msg,
Date: time.Now().UTC(),
}
m.dispatch()
}
func handleDisconnection(sender *websocket.Conn) {
m := message{
Sender: "server",
Content: connections[sender] + " has left the chat",
Date: time.Now().UTC(),
}
m.dispatch()
delete(connections, sender)
}
func handleIncomingMessage(sender *websocket.Conn, msg string) {
if _, ok := connections[sender]; !ok {
connections[sender] = strings.TrimSpace(msg)
m := message{
Sender: "server",
Content: msg + " has joined the chat",
Date: time.Now().UTC(),
}
m.dispatch()
return
}
sendChatMessage(sender, msg)
}