예제 #1
0
 def send_user_sync(
     self, instance_id: str, user_id: str, is_syncing: bool, last_sync_ms: int
 ) -> None:
     """Poke the master that a user has started/stopped syncing."""
     self.send_command(
         UserSyncCommand(instance_id, user_id, is_syncing, last_sync_ms)
     )
예제 #2
0
    def new_connection(self, connection: AbstractConnection):
        """Called when we have a new connection.
        """
        self._connections.append(connection)

        # If we are connected to replication as a client (rather than a server)
        # we need to reset the reconnection delay on the client factory (which
        # is used to do exponential back off when the connection drops).
        #
        # Ideally we would reset the delay when we've "fully established" the
        # connection (for some definition thereof) to stop us from tightlooping
        # on reconnection if something fails after this point and we drop the
        # connection. Unfortunately, we don't really have a better definition of
        # "fully established" than the connection being established.
        if self._factory:
            self._factory.resetDelay()

        # Tell the other end if we have any users currently syncing.
        currently_syncing = (self._presence_handler.
                             get_currently_syncing_users_for_replication())

        now = self._clock.time_msec()
        for user_id in currently_syncing:
            connection.send_command(
                UserSyncCommand(self._instance_id, user_id, True, now))
예제 #3
0
    def connectionMade(self):
        self.send_command(NameCommand(self.client_name))
        BaseReplicationStreamProtocol.connectionMade(self)

        # Once we've connected subscribe to the necessary streams
        for stream_name, token in iteritems(self.handler.get_streams_to_replicate()):
            self.replicate(stream_name, token)

        # Tell the server if we have any users currently syncing (should only
        # happen on synchrotrons)
        currently_syncing = self.handler.get_currently_syncing_users()
        now = self.clock.time_msec()
        for user_id in currently_syncing:
            self.send_command(UserSyncCommand(user_id, True, now))

        # We've now finished connecting to so inform the client handler
        self.handler.update_connection(self)

        # This will happen if we don't actually subscribe to any streams
        if not self.streams_connecting:
            self.handler.finished_connecting()