From 183f746158a6a83d0464647def338fa445348802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Papp?= Date: Thu, 27 Jun 2024 18:42:40 +0200 Subject: [PATCH] Order the source code --- relay/client/client.go | 116 ++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/relay/client/client.go b/relay/client/client.go index 2913550c7..40421e2b9 100644 --- a/relay/client/client.go +++ b/relay/client/client.go @@ -203,31 +203,6 @@ func (c *Client) Close() error { return c.close(false) } -func (c *Client) close(byServer bool) error { - c.readLoopMutex.Lock() - defer c.readLoopMutex.Unlock() - - c.mu.Lock() - var err error - if !c.serviceIsRunning { - c.mu.Unlock() - return nil - } - - c.serviceIsRunning = false - c.closeAllConns() - if !byServer { - c.writeCloseMsg() - err = c.relayConn.Close() - } - c.mu.Unlock() - - c.wgReadLoop.Wait() - c.log.Infof("relay connection closed with: %s", c.serverAddress) - c.ctxCancel() - return err -} - func (c *Client) connect() error { conn, err := ws.Dial(c.serverAddress) if err != nil { @@ -384,6 +359,64 @@ func (c *Client) closeAllConns() { c.conns = make(map[string]*connContainer) } +// todo check by reference too, the id is not enought because the id come from the outer conn +func (c *Client) closeConn(id string) error { + c.mu.Lock() + defer c.mu.Unlock() + + container, ok := c.conns[id] + if !ok { + return fmt.Errorf("connection already closed") + } + container.close() + delete(c.conns, id) + + return nil +} + +func (c *Client) close(byServer bool) error { + c.readLoopMutex.Lock() + defer c.readLoopMutex.Unlock() + + c.mu.Lock() + var err error + if !c.serviceIsRunning { + c.mu.Unlock() + return nil + } + + c.serviceIsRunning = false + c.closeAllConns() + if !byServer { + c.writeCloseMsg() + err = c.relayConn.Close() + } + c.mu.Unlock() + + c.wgReadLoop.Wait() + c.log.Infof("relay connection closed with: %s", c.serverAddress) + c.ctxCancel() + return err +} + +func (c *Client) notifyDisconnected() { + c.listenerMutex.Lock() + defer c.listenerMutex.Unlock() + + if c.onDisconnectListener == nil { + return + } + go c.onDisconnectListener() +} + +func (c *Client) writeCloseMsg() { + msg := messages.MarshalCloseMsg() + _, err := c.relayConn.Write(msg) + if err != nil { + c.log.Errorf("failed to send close message: %s", err) + } +} + func (c *Client) readWithTimeout(buf []byte) (int, error) { ctx, cancel := context.WithTimeout(c.parentCtx, serverResponseTimeout) defer cancel() @@ -406,36 +439,3 @@ func (c *Client) readWithTimeout(buf []byte) (int, error) { return n, err } } - -// todo check by reference too, the id is not enought because the id come from the outer conn -func (c *Client) closeConn(id string) error { - c.mu.Lock() - defer c.mu.Unlock() - - container, ok := c.conns[id] - if !ok { - return fmt.Errorf("connection already closed") - } - container.close() - delete(c.conns, id) - - return nil -} - -func (c *Client) notifyDisconnected() { - c.listenerMutex.Lock() - defer c.listenerMutex.Unlock() - - if c.onDisconnectListener == nil { - return - } - go c.onDisconnectListener() -} - -func (c *Client) writeCloseMsg() { - msg := messages.MarshalCloseMsg() - _, err := c.relayConn.Write(msg) - if err != nil { - c.log.Errorf("failed to send close message: %s", err) - } -}