summaryrefslogtreecommitdiff
path: root/pkg/server/server.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-02-17 11:56:43 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-02-19 23:51:31 +0300
commitbd5339bff8bf5f5e877e94dfef265a22570a69c7 (patch)
tree5902df7a9f21c00d9c414f6b0c2b79aadfd84752 /pkg/server/server.go
parentdf935315c7201b7d42eb361b3ac3d36fe83e53e6 (diff)
first working version
Diffstat (limited to 'pkg/server/server.go')
-rw-r--r--pkg/server/server.go30
1 files changed, 19 insertions, 11 deletions
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 0e1bf24..4f012d0 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -4,6 +4,7 @@ import (
"tunnel/pkg/config"
"tunnel/pkg/netstring"
"strings"
+ "errors"
"bytes"
"sync"
"time"
@@ -18,10 +19,12 @@ type Server struct {
since time.Time
wg sync.WaitGroup
+ mu sync.Mutex
once sync.Once
done chan struct{}
+ streams streams
env env
nextCid uint64
@@ -47,11 +50,13 @@ type request struct {
argc int
args []string
- failed bool
-
out *bytes.Buffer
}
+type requestError string
+
+var errNotImplemented = errors.New("not implemented")
+
func (c *client) String() string {
return fmt.Sprintf("client(%d)", c.id)
}
@@ -73,15 +78,11 @@ func (r *request) Println(v ...interface{}) {
}
func (r *request) Fatal(v ...interface{}) {
- panic(fmt.Sprint(v...))
+ panic(requestError(fmt.Sprint(v...)))
}
func (r *request) Fatalf(format string, v ...interface{}) {
- panic(fmt.Sprintf(format, v...))
-}
-
-func (r *request) Fatalln(v ...interface{}) {
- panic(fmt.Sprintln(v...))
+ panic(requestError(fmt.Sprintf(format, v...)))
}
func (r *request) expect(c ...int) {
@@ -134,6 +135,7 @@ func New() (*Server, error) {
listen: listen,
since: time.Now(),
done: make(chan struct{}),
+ streams: make(streams),
}
return s, nil
@@ -294,9 +296,12 @@ func (r *request) parse(query string) {
func (r *request) run(query string) {
defer func () {
- if e := recover(); e != nil {
- r.failed = true
- r.Print(e)
+ switch err := recover().(type) {
+ case requestError:
+ r.Print(err)
+ default:
+ panic(err)
+ case nil:
}
}()
@@ -304,6 +309,9 @@ func (r *request) run(query string) {
log.Printf("%s %s run [%s] '%s'", r.c, r, r.cmd.name, strings.Join(r.args, " "))
+ r.c.s.mu.Lock()
+ defer r.c.s.mu.Unlock()
+
r.cmd.f(r)
}