X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=daemon.go;h=be9a84e51c33b8ee0e6f6878dceda35bdb7ec1f8;hb=de49f5eeba0117dd09fcdc290ef99ba6a5e2656d;hp=59d6372b4a64b3e611e28cfd48ac53737ad69e8e;hpb=043730c35562365191764faf321424eb7bec0513;p=goircd.git diff --git a/daemon.go b/daemon.go index 59d6372..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) @@ -84,7 +84,7 @@ func (daemon *Daemon) SendMotd(client *Client) { } client.ReplyNicknamed("375", "- "+daemon.hostname+" Message of the day -") - for _, s := range bytes.Split(motd, []byte("\n")) { + for _, s := range bytes.Split(bytes.TrimRight(motd, "\n"), []byte("\n")) { client.ReplyNicknamed("372", "- "+string(s)) } client.ReplyNicknamed("376", "End of /MOTD command") @@ -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 @@ -247,12 +246,13 @@ func (daemon *Daemon) HandlerJoin(client *Client, cmd string) { room_new, room_sink := daemon.RoomRegister(room) if key != "" { room_new.key = key + room_new.StateSave() } room_sink <- ClientEvent{client, EVENT_NEW, ""} } } -func (daemon *Daemon) Processor(events chan ClientEvent) { +func (daemon *Daemon) Processor(events <-chan ClientEvent) { for event := range events { // Check for clients aliveness @@ -348,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, ""} } @@ -395,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 { @@ -412,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":