Add exponential backoff to send state event
This commit is contained in:
		
					parent
					
						
							
								6d9d920a4b
							
						
					
				
			
			
				commit
				
					
						c023249a1a
					
				
			
		
					 1 changed files with 45 additions and 3 deletions
				
			
		| 
						 | 
					@ -213,7 +213,12 @@ export class ConferenceCallManager extends EventEmitter {
 | 
				
			||||||
      ?.getContent()?.active;
 | 
					      ?.getContent()?.active;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!activeConf) {
 | 
					    if (!activeConf) {
 | 
				
			||||||
      this.client.sendStateEvent(room.roomId, CONF_ROOM, { active: true }, "");
 | 
					      this._sendStateEventWithRetry(
 | 
				
			||||||
 | 
					        room.roomId,
 | 
				
			||||||
 | 
					        CONF_ROOM,
 | 
				
			||||||
 | 
					        { active: true },
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Request permissions and get the user's webcam/mic stream if we haven't yet.
 | 
					    // Request permissions and get the user's webcam/mic stream if we haven't yet.
 | 
				
			||||||
| 
						 | 
					@ -278,7 +283,7 @@ export class ConferenceCallManager extends EventEmitter {
 | 
				
			||||||
      userId
 | 
					      userId
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.client.sendStateEvent(
 | 
					    this._sendStateEventWithRetry(
 | 
				
			||||||
      this.room.roomId,
 | 
					      this.room.roomId,
 | 
				
			||||||
      "m.room.member",
 | 
					      "m.room.member",
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -323,7 +328,7 @@ export class ConferenceCallManager extends EventEmitter {
 | 
				
			||||||
      userId
 | 
					      userId
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.client.sendStateEvent(
 | 
					    this._sendStateEventWithRetry(
 | 
				
			||||||
      this.room.roomId,
 | 
					      this.room.roomId,
 | 
				
			||||||
      "m.room.member",
 | 
					      "m.room.member",
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -603,4 +608,41 @@ export class ConferenceCallManager extends EventEmitter {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.emit("participants_changed");
 | 
					    this.emit("participants_changed");
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Utils
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  _sendStateEventWithRetry(
 | 
				
			||||||
 | 
					    roomId,
 | 
				
			||||||
 | 
					    eventType,
 | 
				
			||||||
 | 
					    content,
 | 
				
			||||||
 | 
					    stateKey,
 | 
				
			||||||
 | 
					    callback,
 | 
				
			||||||
 | 
					    maxAttempts = 3
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    const sendStateEventWithRetry = async (attempt = 0) => {
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        return await this.client.sendStateEvent(
 | 
				
			||||||
 | 
					          roomId,
 | 
				
			||||||
 | 
					          eventType,
 | 
				
			||||||
 | 
					          content,
 | 
				
			||||||
 | 
					          stateKey,
 | 
				
			||||||
 | 
					          callback
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      } catch (error) {
 | 
				
			||||||
 | 
					        if (attempt >= maxAttempts) {
 | 
				
			||||||
 | 
					          throw error;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await new Promise((resolve) =>
 | 
				
			||||||
 | 
					          setTimeout(resolve(), Math.pow(2, attempt) * 5)
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return sendStateEventWithRetry(attempt + 1);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return sendStateEventWithRetry();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue