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 {
"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,
return strs
}
-func (client *Client) disconnect() {
+func (client *Client) closeConn() {
client.mu.Lock()
defer client.mu.Unlock()
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
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
}
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)
}
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 {
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