}
type Room struct {
+ Verbose bool
name string
topic string
key string
members map[*Client]bool
hostname string
- log_sink chan LogEvent
- state_sink chan StateEvent
+ log_sink chan<- LogEvent
+ state_sink chan<- StateEvent
}
-func NewRoom(hostname, name string, log_sink chan LogEvent, state_sink chan StateEvent) *Room {
+func NewRoom(hostname, name string, log_sink chan<- LogEvent, state_sink chan<- StateEvent) *Room {
room := Room{name: name}
room.members = make(map[*Client]bool)
room.topic = ""
room.state_sink <- StateEvent{room.name, room.topic, room.key}
}
-func (room *Room) Processor(events chan ClientEvent) {
+func (room *Room) Processor(events <-chan ClientEvent) {
var client *Client
for event := range events {
client = event.client
switch event.event_type {
case EVENT_NEW:
room.members[client] = true
- log.Println(client, "joined", room.name)
+ if room.Verbose {
+ log.Println(client, "joined", room.name)
+ }
room.SendTopic(client)
room.Broadcast(fmt.Sprintf(":%s JOIN %s", client, room.name))
room.log_sink <- LogEvent{room.name, client.nickname, "joined", true}