import (
"fmt"
+ "io/ioutil"
"log"
"os"
"path"
// Logging events logger itself
// Each room's events are written to separate file in logdir
// Events include messages, topic and keys changes, joining and leaving
-func Logger(logdir string, events chan LogEvent) {
+func Logger(logdir string, events <-chan LogEvent) {
mode := os.O_CREATE | os.O_WRONLY | os.O_APPEND
perm := os.FileMode(0660)
var format string
// Room state events saver
// 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) {
- mode := os.O_CREATE | os.O_TRUNC | os.O_WRONLY
- perm := os.FileMode(0660)
+func StateKeeper(statedir string, events <-chan StateEvent) {
for event := range events {
- state_path := path.Join(statedir, event.where)
- fd, err := os.OpenFile(state_path, mode, perm)
+ 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.Println("Can not open statefile", state_path, err)
- continue
+ log.Printf("Can not write statefile %s: %v", fn, err)
}
- fd.WriteString(event.topic + "\n" + event.key + "\n")
- fd.Close()
}
}