58 lines
1.0 KiB
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)
|
|
}
|