diff options
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvPipe.go')
-rw-r--r-- | src/hub/src/spreadspace.org/sfive/s5srvPipe.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srvPipe.go b/src/hub/src/spreadspace.org/sfive/s5srvPipe.go new file mode 100644 index 0000000..e024e2d --- /dev/null +++ b/src/hub/src/spreadspace.org/sfive/s5srvPipe.go @@ -0,0 +1,56 @@ +package sfive + +import ( + "bufio" + "net" +) + +func (self StatsSinkServer) handleConnection(conn net.Conn) { + reader := bufio.NewReader(conn) + buffer, err := reader.ReadBytes('\n') + if err != nil { + s5l.Printf("failed to read from connection: %v\n", err) + return + } + marshaller, err := NewStatefulDecoder(buffer) + if err != nil { + s5l.Printf("failed initializing decoder with init message: %v\n", err) + return + } + + for { + buffer, err := reader.ReadBytes('\n') + if err != nil { + s5l.Printf("failed to read from connection: %v\n", err) + return + } + + s5l.Printf("msg: %v", string(buffer)) + + value, err := marshaller.Decode(buffer) + if err != nil { + s5l.Printf("failed to decode message: %v\n", err) + continue + } + + self.appendData <- value + } +} + +func (self StatsSinkServer) ServePipe(pipePath string) { + ln, err := net.Listen("unix", pipePath) + if err != nil { + s5l.Printf("failed to connect to unix pipe: %v", err) + return + } + defer ln.Close() + + for { + conn, err := ln.Accept() + if err != nil { + // ignore + continue + } + go self.handleConnection(conn) + } +} |