summaryrefslogtreecommitdiff
path: root/pkg/server/socket/loop.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/socket/loop.go')
-rw-r--r--pkg/server/socket/loop.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/pkg/server/socket/loop.go b/pkg/server/socket/loop.go
new file mode 100644
index 0000000..88e9491
--- /dev/null
+++ b/pkg/server/socket/loop.go
@@ -0,0 +1,46 @@
+package socket
+
+import (
+ "tunnel/pkg/server/env"
+ "tunnel/pkg/server/queue"
+)
+
+type loopSocket struct{}
+
+type loopChannel struct {
+ c chan queue.Q
+ q chan error
+}
+
+func (c *loopChannel) Send(wq queue.Q) error {
+ c.c <- wq
+ return <-c.q
+}
+
+func (c *loopChannel) Recv(rq queue.Q) error {
+ defer close(c.q)
+ return queue.Copy(rq, <-c.c)
+}
+
+func (c *loopChannel) String() string {
+ return "loop"
+}
+
+func (c *loopChannel) Close() error {
+ return nil
+}
+
+func (s *loopSocket) Open(env.Env) (Channel, error) {
+ return &loopChannel{make(chan queue.Q), make(chan error)}, nil
+}
+
+func (s *loopSocket) String() string {
+ return "loop"
+}
+
+func (s *loopSocket) Close() {
+}
+
+func newLoopSocket() (S, error) {
+ return &loopSocket{}, nil
+}