X-Git-Url: http://www.git.cypherpunks.ru/?p=goircd.git;a=blobdiff_plain;f=events.go;fp=events.go;h=0000000000000000000000000000000000000000;hp=283b5f76d5039ba03fa0e1f2b2cbefced7f877cd;hb=b7fb219307483d2c31b5dad1f559f325f2fd1a5e;hpb=def58d0f4944397faa8cdd4a9cf3515125e0b548 diff --git a/events.go b/events.go deleted file mode 100644 index 283b5f7..0000000 --- a/events.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -goircd -- minimalistic simple Internet Relay Chat (IRC) server -Copyright (C) 2014-2020 Sergey Matveev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -package main - -import ( - "fmt" - "io/ioutil" - "log" - "os" - "path" - "time" -) - -const ( - EventNew = iota - EventDel = iota - EventMsg = iota - 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 { - client *Client - eventType int - text string -} - -func (m ClientEvent) String() string { - return string(m.eventType) + ": " + m.client.String() + ": " + m.text -} - -// Logging in-room events -// Intended to tell when, where and who send a message or meta command -type LogEvent struct { - where string - who string - what string - meta bool -} - -// 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) { - 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+".log") - fd, err = os.OpenFile(logfile, mode, perm) - if err != nil { - log.Println("Can not open logfile", logfile, err) - continue - } - if event.meta { - format = FormatMeta - } else { - format = FormatMsg - } - _, err = fd.WriteString(fmt.Sprintf(format, time.Now(), event.who, event.what)) - fd.Close() - if err != nil { - log.Println("Error writing to logfile", logfile, err) - } - } -} - -type StateEvent struct { - where string - topic string - key 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) { - 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)) - if err != nil { - log.Printf("Can not write statefile %s: %v", fn, err) - } - } -}