summaryrefslogtreecommitdiff
path: root/src/hub/src/spreadspace.org/sfive/s5srvPipe.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvPipe.go')
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srvPipe.go56
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)
+ }
+}