X-Git-Url: http://www.git.cypherpunks.ru/?p=goircd.git;a=blobdiff_plain;f=events.go;h=9f3673b74563645eaeee2171f51ff9beacb24516;hp=843e8b59d8b407d2e96de3e334d77afab4219d80;hb=7770e09e68f8dd0991ecd5a32383a89ac3e50857;hpb=b67868201041359c456457b62910866a8e072b2b diff --git a/events.go b/events.go index 843e8b5..9f3673b 100644 --- a/events.go +++ b/events.go @@ -34,10 +34,17 @@ const ( EventTopic = iota EventWho = iota EventMode = iota + EventTerm = iota + EventTick = iota FormatMsg = "[%s] <%s> %s\n" FormatMeta = "[%s] * %s %s\n" ) +var ( + logSink chan LogEvent = make(chan LogEvent) + stateSink chan StateEvent = make(chan StateEvent) +) + // Client events going from each of client // They can be either NEW, DEL or unparsed MSG type ClientEvent struct { @@ -66,9 +73,12 @@ func Logger(logdir string, events <-chan LogEvent) { mode := os.O_CREATE | os.O_WRONLY | os.O_APPEND perm := os.FileMode(0660) var format string + var logfile string + var fd *os.File + var err error for event := range events { - logfile := path.Join(logdir, event.where) - fd, err := os.OpenFile(logfile, mode, perm) + logfile = path.Join(logdir, event.where+".log") + fd, err = os.OpenFile(logfile, mode, perm) if err != nil { log.Println("Can not open logfile", logfile, err) continue @@ -96,10 +106,13 @@ type StateEvent struct { // Room states shows that either topic or key has been changed // Each room's state is written to separate file in statedir func StateKeeper(statedir string, events <-chan StateEvent) { + var fn string + var data string + var err error for event := range events { - fn := path.Join(statedir, event.where) - data := event.topic + "\n" + event.key + "\n" - err := ioutil.WriteFile(fn, []byte(data), os.FileMode(0660)) + fn = path.Join(statedir, event.where) + data = event.topic + "\n" + event.key + "\n" + err = ioutil.WriteFile(fn, []byte(data), os.FileMode(0660)) if err != nil { log.Printf("Can not write statefile %s: %v", fn, err) }