aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--auth.go2
-rw-r--r--client.go20
-rwxr-xr-xexample/chat-client.lua2
-rwxr-xr-xexample/dump-traffic.lua2
-rw-r--r--hydra.go14
5 files changed, 22 insertions, 18 deletions
diff --git a/auth.go b/auth.go
index a58aba3..93af0ee 100644
--- a/auth.go
+++ b/auth.go
@@ -82,7 +82,7 @@ func (auth *Auth) connect() {
func (auth *Auth) fail(err string) {
auth.err = err
auth.state = asError
- auth.client.disconnect()
+ auth.client.closeConn()
}
func (auth *Auth) checkState(state authState, pkt *mt.Pkt) bool {
diff --git a/client.go b/client.go
index d065709..d27af33 100644
--- a/client.go
+++ b/client.go
@@ -41,7 +41,7 @@ var clientFuncs = map[string]lua.LGFunction{
"state": l_client_state,
"connect": l_client_connect,
"poll": l_client_poll,
- "disconnect": l_client_disconnect,
+ "close": l_client_close,
"enable": l_client_enable,
"subscribe": l_client_subscribe,
"unsubscribe": l_client_unsubscribe,
@@ -76,7 +76,7 @@ func getStrings(l *lua.LState) []string {
return strs
}
-func (client *Client) disconnect() {
+func (client *Client) closeConn() {
client.mu.Lock()
defer client.mu.Unlock()
@@ -162,16 +162,15 @@ func l_client_connect(l *lua.LState) int {
if err == nil {
client.mu.Lock()
-
for _, component := range client.components {
component.process(&pkt)
}
+ _, subscribed := client.subscribed[string(convert.PushPktType(&pkt))]
+ client.mu.Unlock()
- if _, exists := client.subscribed[string(convert.PushPktType(&pkt))]; exists || client.wildcard {
+ if subscribed || client.wildcard {
client.queue <- &pkt
}
-
- client.mu.Unlock()
} else if errors.Is(err, net.ErrClosed) {
close(client.queue)
return
@@ -197,9 +196,9 @@ func l_client_poll(l *lua.LState) int {
return 2
}
-func l_client_disconnect(l *lua.LState) int {
+func l_client_close(l *lua.LState) int {
client := getClient(l)
- client.disconnect()
+ client.closeConn()
return 0
}
@@ -257,6 +256,11 @@ func l_client_wildcard(l *lua.LState) int {
func l_client_send(l *lua.LState) int {
client := getClient(l)
+
+ if client.state != csConnected {
+ panic("not connected")
+ }
+
cmd := convert.ReadCmd(l)
doAck := l.ToBool(4)
diff --git a/example/chat-client.lua b/example/chat-client.lua
index b1bd505..c1828ec 100755
--- a/example/chat-client.lua
+++ b/example/chat-client.lua
@@ -18,4 +18,4 @@ while not hydra.canceled() do
end
end
-client:disconnect()
+client:close()
diff --git a/example/dump-traffic.lua b/example/dump-traffic.lua
index 648aa4d..b3d89da 100755
--- a/example/dump-traffic.lua
+++ b/example/dump-traffic.lua
@@ -20,4 +20,4 @@ while not hydra.canceled() do
end
end
-client:disconnect()
+client:close()
diff --git a/hydra.go b/hydra.go
index 3bc7414..eb56425 100644
--- a/hydra.go
+++ b/hydra.go
@@ -36,11 +36,11 @@ var builtinFiles = []string{
}
var hydraFuncs = map[string]lua.LGFunction{
- "client": l_client,
- "dtime": l_dtime,
- "canceled": l_canceled,
- "poll": l_poll,
- "disconnect": l_disconnect,
+ "client": l_client,
+ "dtime": l_dtime,
+ "canceled": l_canceled,
+ "poll": l_poll,
+ "close": l_close,
}
func signalChannel() chan os.Signal {
@@ -71,9 +71,9 @@ func l_poll(l *lua.LState) int {
return 3
}
-func l_disconnect(l *lua.LState) int {
+func l_close(l *lua.LState) int {
for _, client := range getClients(l) {
- client.disconnect()
+ client.closeConn()
}
return 0