Как вызвать Twisted реактор из файла, отличного от его?

У меня есть вопрос, который вполне может принадлежать Twisted или иметь прямое отношение к Python.

Моя проблема, как и другая, связана с процессом отключения в Twisted. Как я читаю на этом сайте, если я хочу, я должен выполнить следующие шаги:

  1. Сервер должен перестать слушать.
  2. Клиентское соединение должно отключиться.
  3. Соединение с сервером должно отключиться.

Согласно тому, что я прочитал на предыдущей странице, чтобы сделать первый шаг, нужно запустить stopListening метод.

В примере, упомянутом в Интернете, все действия выполняются в одном и том же сценарии. Упрощение доступа к различным переменным и методам.

Для меня у меня есть сервер и клиент в разных файлах и разных местах.

У меня есть функция, которая создает сервер, назначает протокол и хочет, из клиентского протокола в другом файле, сделать вызов AMP для метода для остановки соединителя.

AMP вызова вызывает команду SendMsg.

class TESTServer(protocol.Protocol):

    factory = None
    sUsername = ""
    credProto = None
    bGSuser = None
    slot = None
"""
Here was uninteresting code.
"""
            #   upwards=self.bGSuser, forwarded=True, tx_timestamp=iTimestamp,\
            #    message=sMsg)

        log.msg("self.connector")
        log.msg(self.connector)

        return {'bResult': True}
    SendMsg.responder(vSendMsg)

    def _testfunction(self):
        logger = logging.getLogger('server')

        log.startLogging(sys.stdout)

        pf = CredAMPServerFactory()

        sslContext = ssl.DefaultOpenSSLContextFactory('key/server.pem',\
     'key/public.pem',)

        self.connector = reactor.listenSSL(1234, pf, contextFactory = sslContext,)

        log.msg('Server running...')
        reactor.run()

if __name__ == '__main__':
    TESTServer()._testfunction()

Класс CredAMPServerFactory назначает соответствующий протокол.

class CredAMPServerFactory(ServerFactory):

    """
    Server factory useful for creating L{CredReceiver} and L{SATNETServer} instances.

    This factory takes care of associating a L{Portal} with the L{CredReceiver}
    instances it creates. If the login is succesfully achieved, a L{SATNETServer}
    instance is also created.
    """
    protocol = CredReceiver

В классе "CredReceiver" у меня есть вызов, который назначает протокол классу TestServer. Я делаю это, чтобы совершать звонки, используя метод AMP "Ответчик".

        self.protocol = SATNETServer

Моя проблема в том, что когда я делаю вызов, программа отвечает с ошибкой, указывающей, что соединитель не принадлежит объекту атрибута CredReceiver.

  File "/home/sgongar/Dev/protocol/server_amp.py", line 248, in vSendMsg
    log.msg(self.connector)
exceptions.AttributeError: 'CredReceiver' object has no attribute 'connector'

Как я мог это сделать? Кто-нибудь знает подобный пример, который может принять к сведению?

Спасибо.

РЕДАКТИРОВАТЬ.

Сторона сервера:

server_amp.py

  1. Запускает реактор: reactor.listenSSL(1234, pf, contextFactory = sslContext,) из класса SATNETServer.

  2. Назначает протокол, pf, чтобы CredAMPServerFactory класс, который принадлежит модулю server.py также из класса SATNETServer.

server.py

  1. В классе CredAMPServerFactory правопреемники CredReceiver класс к протоколу.
  2. Как только соединение установлено, класс SATNETServer назначен протоколу.

Сторона клиента:

client_amp

  1. Делает звонок в SendMsg метод, принадлежащий кSATNETServer учебный класс.

0 ответов

Другие вопросы по тегам