X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=daemon.go;h=be9a84e51c33b8ee0e6f6878dceda35bdb7ec1f8;hb=de49f5eeba0117dd09fcdc290ef99ba6a5e2656d;hp=1dc1763520b310bb984803adaa852177b741ff24;hpb=9b2b3baca4f464e44e034c083c8973330e9ed3f9;p=goircd.git diff --git a/daemon.go b/daemon.go index 1dc1763..be9a84e 100644 --- a/daemon.go +++ b/daemon.go @@ -46,11 +46,11 @@ type Daemon struct { rooms map[string]*Room room_sinks map[*Room]chan ClientEvent last_aliveness_check time.Time - log_sink chan LogEvent - state_sink chan StateEvent + log_sink chan<- LogEvent + state_sink chan<- StateEvent } -func NewDaemon(hostname, motd string, log_sink chan LogEvent, state_sink chan StateEvent) *Daemon { +func NewDaemon(hostname, motd string, log_sink chan<- LogEvent, state_sink chan<- StateEvent) *Daemon { daemon := Daemon{hostname: hostname, motd: motd} daemon.clients = make(map[*Client]bool) daemon.rooms = make(map[string]*Room) @@ -195,7 +195,7 @@ func (daemon *Daemon) ClientRegister(client *Client, command string, cols []stri // Register new room in Daemon. Create an object, events sink, save pointers // to corresponding daemon's places and start room's processor goroutine. -func (daemon *Daemon) RoomRegister(name string) (*Room, chan ClientEvent) { +func (daemon *Daemon) RoomRegister(name string) (*Room, chan<- ClientEvent) { room_new := NewRoom(daemon.hostname, name, daemon.log_sink, daemon.state_sink) room_sink := make(chan ClientEvent) daemon.rooms[name] = room_new @@ -239,7 +239,6 @@ func (daemon *Daemon) HandlerJoin(client *Client, cmd string) { } if denied { client.ReplyNicknamed("475", room, "Cannot join channel (+k) - bad key") - continue } if denied || joined { continue @@ -253,7 +252,7 @@ func (daemon *Daemon) HandlerJoin(client *Client, cmd string) { } } -func (daemon *Daemon) Processor(events chan ClientEvent) { +func (daemon *Daemon) Processor(events <-chan ClientEvent) { for event := range events { // Check for clients aliveness @@ -349,6 +348,7 @@ func (daemon *Daemon) Processor(events chan ClientEvent) { r, found := daemon.rooms[room] if !found { client.ReplyNoChannel(room) + continue } daemon.room_sinks[r] <- ClientEvent{client, EVENT_DEL, ""} } @@ -396,6 +396,7 @@ func (daemon *Daemon) Processor(events chan ClientEvent) { r, found := daemon.rooms[cols[0]] if !found { client.ReplyNoChannel(cols[0]) + continue } var change string if len(cols) > 1 { @@ -413,6 +414,7 @@ func (daemon *Daemon) Processor(events chan ClientEvent) { r, found := daemon.rooms[room] if !found { client.ReplyNoChannel(room) + continue } daemon.room_sinks[r] <- ClientEvent{client, EVENT_WHO, ""} case "WHOIS":