qol change
This commit is contained in:
@@ -79,22 +79,6 @@ func (r *Registry) RegisterMod(channelID, serverID string, conn *websocket.Conn)
|
|||||||
// caller should use FlushChannelWithSender to perform actual sends
|
// caller should use FlushChannelWithSender to perform actual sends
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnregisterMod : remove mod for a channel
|
|
||||||
func (r *Registry) UnregisterMod(channelID string) {
|
|
||||||
r.mu.RLock()
|
|
||||||
e := r.entries[channelID]
|
|
||||||
r.mu.RUnlock()
|
|
||||||
if e == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
e.mu.Lock()
|
|
||||||
defer e.mu.Unlock()
|
|
||||||
if e.Mod != nil && e.Mod.Conn != nil {
|
|
||||||
_ = e.Mod.Conn.Close()
|
|
||||||
}
|
|
||||||
e.Mod = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterBot : single connection for bot. after registration call FlushAllToBotWithSender
|
// RegisterBot : single connection for bot. after registration call FlushAllToBotWithSender
|
||||||
func (r *Registry) RegisterBot(conn *websocket.Conn) {
|
func (r *Registry) RegisterBot(conn *websocket.Conn) {
|
||||||
r.botMu.Lock()
|
r.botMu.Lock()
|
||||||
@@ -105,13 +89,45 @@ func (r *Registry) RegisterBot(conn *websocket.Conn) {
|
|||||||
r.botMu.Unlock()
|
r.botMu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Registry) UnregisterMod(channelID string) {
|
||||||
|
r.mu.RLock()
|
||||||
|
e := r.entries[channelID]
|
||||||
|
r.mu.RUnlock()
|
||||||
|
if e == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
e.mu.Lock()
|
||||||
|
modConn := e.Mod
|
||||||
|
e.Mod = nil
|
||||||
|
e.mu.Unlock()
|
||||||
|
|
||||||
|
if modConn != nil && modConn.Conn != nil {
|
||||||
|
_ = modConn.Conn.SetWriteDeadline(time.Now().Add(time.Second))
|
||||||
|
_ = modConn.Conn.WriteControl(
|
||||||
|
websocket.CloseMessage,
|
||||||
|
websocket.FormatCloseMessage(websocket.CloseNormalClosure, "Disconnecting."),
|
||||||
|
time.Now().Add(time.Second),
|
||||||
|
)
|
||||||
|
_ = modConn.Conn.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (r *Registry) UnregisterBot() {
|
func (r *Registry) UnregisterBot() {
|
||||||
r.botMu.Lock()
|
r.botMu.Lock()
|
||||||
if r.bot != nil && r.bot.Conn != nil {
|
botConn := r.bot
|
||||||
_ = r.bot.Conn.Close()
|
|
||||||
}
|
|
||||||
r.bot = nil
|
r.bot = nil
|
||||||
r.botMu.Unlock()
|
r.botMu.Unlock()
|
||||||
|
|
||||||
|
if botConn != nil && botConn.Conn != nil {
|
||||||
|
_ = botConn.Conn.SetWriteDeadline(time.Now().Add(time.Second))
|
||||||
|
_ = botConn.Conn.WriteControl(
|
||||||
|
websocket.CloseMessage,
|
||||||
|
websocket.FormatCloseMessage(websocket.CloseNormalClosure, "Disconnecting."),
|
||||||
|
time.Now().Add(time.Second),
|
||||||
|
)
|
||||||
|
_ = botConn.Conn.Close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Registry) Send(channelID string, out GatewayMessageOut, sendOverConn func(*websocket.Conn, GatewayMessageOut) error) (delivered bool, queued bool, err error) {
|
func (r *Registry) Send(channelID string, out GatewayMessageOut, sendOverConn func(*websocket.Conn, GatewayMessageOut) error) (delivered bool, queued bool, err error) {
|
||||||
|
|||||||
31
ws/util.go
31
ws/util.go
@@ -126,22 +126,13 @@ func (wsg *WebsocketGateway) registerConn(conn *websocket.Conn, typ, channelId,
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wsg *WebsocketGateway) unregisterConn(conn *websocket.Conn, typ, channelId string) {
|
func (wsg *WebsocketGateway) unregisterConn(typ, channelId string) {
|
||||||
if typ == "bot" {
|
if typ == "bot" {
|
||||||
wsg.registry.UnregisterBot()
|
wsg.registry.UnregisterBot()
|
||||||
if conn != nil {
|
|
||||||
_ = conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "Disconnecting."), time.Now().Add(time.Second))
|
|
||||||
_ = conn.Close()
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
wsg.registry.UnregisterMod(channelId)
|
wsg.registry.UnregisterMod(channelId)
|
||||||
|
|
||||||
if conn != nil {
|
|
||||||
_ = conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "Disconnecting."), time.Now().Add(time.Second))
|
|
||||||
_ = conn.Close()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wsg *WebsocketGateway) closeAll() {
|
func (wsg *WebsocketGateway) closeAll() {
|
||||||
@@ -150,24 +141,14 @@ func (wsg *WebsocketGateway) closeAll() {
|
|||||||
wsg.registry.UnregisterBot()
|
wsg.registry.UnregisterBot()
|
||||||
|
|
||||||
wsg.registry.mu.RLock()
|
wsg.registry.mu.RLock()
|
||||||
entries := make([]*ChannelEntry, 0, len(wsg.registry.entries))
|
channelIDs := make([]string, 0, len(wsg.registry.entries))
|
||||||
for _, e := range wsg.registry.entries {
|
for channelID := range wsg.registry.entries {
|
||||||
entries = append(entries, e)
|
channelIDs = append(channelIDs, channelID)
|
||||||
}
|
}
|
||||||
wsg.registry.mu.RUnlock()
|
wsg.registry.mu.RUnlock()
|
||||||
|
|
||||||
for _, e := range entries {
|
for _, channelID := range channelIDs {
|
||||||
e.mu.Lock()
|
wsg.registry.UnregisterMod(channelID)
|
||||||
modConn := e.Mod
|
|
||||||
if modConn != nil {
|
|
||||||
e.Mod = nil
|
|
||||||
}
|
|
||||||
e.mu.Unlock()
|
|
||||||
|
|
||||||
if modConn != nil && modConn.Conn != nil {
|
|
||||||
_ = modConn.Conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "Shutting down."), time.Now().Add(time.Second))
|
|
||||||
_ = modConn.Conn.Close()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ func (wsg *WebsocketGateway) Serve(ctx context.Context, listenAddr string) error
|
|||||||
|
|
||||||
func (wsg *WebsocketGateway) read(conn *websocket.Conn, _type, channelId string) {
|
func (wsg *WebsocketGateway) read(conn *websocket.Conn, _type, channelId string) {
|
||||||
defer func() {
|
defer func() {
|
||||||
wsg.unregisterConn(conn, _type, channelId)
|
wsg.unregisterConn(_type, channelId)
|
||||||
wsg.logger.Info("Client disconnected.", "remote", conn.RemoteAddr().String())
|
wsg.logger.Info("Client disconnected.", "remote", conn.RemoteAddr().String())
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user