aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/server/unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/unix.go')
-rw-r--r--pkg/server/unix.go89
1 files changed, 89 insertions, 0 deletions
diff --git a/pkg/server/unix.go b/pkg/server/unix.go
new file mode 100644
index 0000000..87b425e
--- /dev/null
+++ b/pkg/server/unix.go
@@ -0,0 +1,89 @@
+package server
+
+import (
+ "bytes"
+ "context"
+ "fmt"
+ "log/slog"
+ "net"
+ "os"
+ "sync"
+
+ "github.com/jpappel/atlas/pkg/data"
+)
+
+// datagram based unix server
+type UnixServer struct {
+ Addr string
+ Db *data.Query
+ shouldClose chan struct{}
+ bufPool *sync.Pool
+}
+
+func (s *UnixServer) ListenAndServe() error {
+ slog.Info("Listening on", slog.String("addr", s.Addr))
+ conn, err := net.ListenUnixgram(
+ "unixgram",
+ &net.UnixAddr{Name: s.Addr, Net: "Unix"},
+ )
+ if err != nil {
+ return err
+ }
+ defer conn.Close()
+ defer os.RemoveAll(s.Addr)
+ slog.Debug("Accepted connection")
+
+ // slog.Info("New Connection",
+ // slog.String("addr", conn.RemoteAddr().String()),
+ // )
+
+ s.bufPool = &sync.Pool{}
+ s.bufPool.New = func() any {
+ return &bytes.Buffer{}
+ }
+ s.handleConn(conn)
+
+ return nil
+}
+
+func (s UnixServer) handleConn(conn *net.UnixConn) {
+ // buf, ok := s.bufPool.Get().(*bytes.Buffer)
+ // if !ok {
+ // panic("Expected *bytes.Buffer in pool")
+ // }
+ buf := make([]byte, 1024)
+
+ n, err := conn.Read(buf)
+ if err != nil {
+ panic(err)
+ }
+ buf = buf[:n]
+
+ fmt.Println(string(buf))
+
+ // if _, err := io.Copy(buf, conn); err != nil {
+ // panic(err)
+ // }
+ // defer buf.Reset()
+ //
+ // io.Copy(os.Stdout, buf)
+
+ // artifact, err := query.Compile(buf.String(), 0, 1)
+ // if err != nil {
+ // panic(err)
+ // }
+ //
+ // docs, err := s.Db.Execute(artifact)
+ // if err != nil {
+ // panic(err)
+ // }
+ //
+ // _, err = query.DefaultOutput{}.OutputTo(conn, slices.Collect(maps.Values(docs)))
+ // if err != nil {
+ // panic(err)
+ // }
+}
+
+func (s *UnixServer) Shutdown(ctx context.Context) error {
+ return nil
+}