API Publi c для отправки сообщений (asyncore, Python) - PullRequest
0 голосов
/ 29 февраля 2020

Как мне создать publi c API для отправки сообщений?

Допустим, у меня есть соединение, которое требует от меня сначала отправить сообщение для входа в систему, или, может быть, я хочу обработать некоторые данные и отправить новый сообщение на сервер. Как я могу это сделать? Возможно ли это сделать с помощью asyncore?

Может быть, лучший вопрос, как мне взаимодействовать с этим asyncore l oop после его запуска?

Это моя попытка сделать что-то вроде этого:

# package.coreio
import asyncore
from queue import Queue

class Client(asyncore.dispatcher):
    """This class represents a client to server connection."""

    def __init__(self) -> None:
        super().__init__()
        self._host = ...
        self._port = ...

        self._messages = Queue()

        self.create_socket()
        self.connect((self._host, self._port))

    def send_message(self, message: bytes) -> None:
        """A public API for sending messages to the server."""
        self._messages.put(message)

    def writable(self) -> None:
        return not self._messages.empty()

    def handle_write(self) -> None:
        message = self._messages.get()
        self.send(message)
        print('Sending:', message)

    def handle_read(self) -> None:
        data = self.recv(4096)
        print(data)

Это моя попытка использования этого интерфейса:

import asyncore
import threading
import time

from .coreio import Client

login_message = ...
get_port = ...

client = Client()
client.send_message(login_message)

thread = threading.Thread(target=asyncore.loop)
thread.start()

time.sleep(2.5)  # Do something for 2.5 seconds.
client.send_message(get_port)  # Send another message.

Очевидно, что он не работает.

...