From 472848fc93accb200ea2dedc46fdaa4e5d71d266 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Tue, 25 Mar 2014 14:07:54 +0100 Subject: Implemented message broadcasting stuff for type Buddy --- buddy.go | 28 +++++++++++++++++++++++++++- rooms.go | 2 +- websock.go | 9 +++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/buddy.go b/buddy.go index 750e424..1128956 100644 --- a/buddy.go +++ b/buddy.go @@ -1,5 +1,9 @@ package main +import ( + "time" +) + type Buddy struct { Nick string Receive chan Message @@ -7,9 +11,31 @@ type Buddy struct { } func NewBuddy(nick string, room *Room) *Buddy { - // TODO: Implement me! + return &Buddy{ + Nick: nick, + Receive: make(chan Message), + room: room, + } } func (b *Buddy) Leave() { b.room.Leave(b.Nick) } + +func (b *Buddy) Push(msg Message) { + go func() { + select { + case b.Receive <- msg: + case <-time.Tick(time.Millisecond * 100): + } + }() +} + +// Say sends a text as a chat message of this user to the connected room. +func (b *Buddy) Say(text string) { + b.room.Messages <- Message{ + Type: MsgChat, + User: b.Nick, + Text: text, + } +} diff --git a/rooms.go b/rooms.go index c732bb6..723fc98 100644 --- a/rooms.go +++ b/rooms.go @@ -35,7 +35,7 @@ func (r *Room) Leave(nick string) { func (r *Room) Broadcast() { for m := range r.Messages { for _, buddy := range r.Buddies { - buddy.Receive <- m // TODO: What happens when this locks? + buddy.Push(m) } } } diff --git a/websock.go b/websock.go index bdb7546..6b69788 100644 --- a/websock.go +++ b/websock.go @@ -3,7 +3,6 @@ package main import ( "code.google.com/p/go.net/websocket" "github.com/gorilla/mux" - "log" "net/http" ) @@ -54,8 +53,14 @@ func AcceptWebSock(rw http.ResponseWriter, req *http.Request) { continue } - // TODO: Broadcast messsage + buddy.Say(s) } }() + + for m := range buddy.Receive { + if send(m) != nil { + return + } + } }).ServeHTTP(rw, req) } -- cgit v1.2.3-54-g00ecf