Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 05c53e1190d867ab9200620a9c4ca6fe8805778a Author: Wim <wim@42.be> Date: Sat Jul 01 17:49:12 2017 +0000 Reestablish the socket when websocket is disconnected. (from @recht matterircd fork) diff --git a/matterclient/matterclient.go b/matterclient/matterclient.go index de2aa94..afcedcd 100644 --- a/matterclient/matterclient.go +++ b/matterclient/matterclient.go @@ -10010 +1008 @@ func (m *MMClient) Login() error {   Jitter: true,   }   uriScheme := "https://" - wsScheme := "wss://"   if m.NoTLS {   uriScheme = "http://" - wsScheme = "ws://"   }   // login to mattermost   m.Client = model.NewClient(uriScheme + m.Credentials.Server) @@ -1826 +18024 @@ func (m *MMClient) Login() error {   // set our team id as default route   m.Client.SetTeamId(m.Team.Id)   + m.wsConnect() + + return nil +} + +func (m *MMClient) wsConnect() { + b := &backoff.Backoff{ + Min: time.Second, + Max: 5 * time.Minute, + Jitter: true, + } + + m.WsConnected = false + wsScheme := "wss://" + if m.NoTLS { + wsScheme = "ws://" + } +   // setup websocket connection   wsurl := wsScheme + m.Credentials.Server + model.API_URL_SUFFIX_V3 + "/users/websocket"   header := http.Header{} @@ -1906 +2067 @@ func (m *MMClient) Login() error {   m.log.Debugf("WsClient: making connection: %s", wsurl)   for {   wsDialer := &websocket.Dialer{Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}} + var err error   m.WsClient, _, err = wsDialer.Dial(wsurl, header)   if err != nil {   d := b.Duration() @@ -19915 +21612 @@ func (m *MMClient) Login() error {   }   break   } - b.Reset()     m.log.Debug("WsClient: connected")   m.WsSequence = 1   m.WsPingChan = make(chan *model.WebSocketResponse)   // only start to parse WS messages when login is completely done   m.WsConnected = true - - return nil  }    func (m *MMClient) Logout() error { @@ -2407 +2547 @@ func (m *MMClient) WsReceiver() {   if _, rawMsg, err = m.WsClient.ReadMessage(); err != nil {   m.log.Error("error:", err)   // reconnect - m.Login() + m.wsConnect()   }     var event model.WebSocketEvent