Создание системы, подобной event.on () с сокетами в python - PullRequest
0 голосов
/ 23 апреля 2020

В последнее время я возился с python сокетами и хотел создать своего рода систему событий. Где я мог бы сделать, как

sock.on('message', function(_msg) => {
    print(_msg)
})

Я новичок в классах в python и в целом, так что это то, что я до сих пор

КЛИЕНТ

import apollo


apollo = apollo.apollo('127.0.0.1', 4343)
apollo.send_message("test")
apollo.listen_message()

Сервер

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 4343
BUFFER_SIZE = 20


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print('connection adress:', addr)
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print("recived data : ", data)
    conn.send(data)
conn.close()

apollo.py

import socket

sock = None

def test(_msg):
    print('nin')

class apollo:

    def __init__(self, _ip, _port):
        self._ip = _ip
        self._port = _port
        print(self._ip)
        global sock
        sock = ConnManager(self._ip, self._port, 2000)


    #def send_message(self, _msg, _to_uid, _author_uid, _buffer_size):
    def send_message(self, _msg):
        self._last_message = _msg
        global sock
        sock.send_message(self._last_message)


    def listen_message(self):
        sock.on('message', test)
        #with sock._conn:
        #    while True:
        #        print(sock._conn.recv(1024))
        #        _msg = input("> ")
        #        sock.send_message(_msg)
        #    while False:
        #        _msg = input("> ")
        #        send_message(_msg)

        #print ("recieived data", data)

class ConnManager:



    def __init__(self, host, port, timeout):
        self._conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
        self._conn.connect((host, port))

    def on(self, event, method):
        self.function_to_run = method
        self._event = event
        self._in = sock._conn.recv(1024).decode('utf-8')
        if(self._in == self._event):
            print('yes')
            return self.function_to_run()

        #while sock._conn.recv(1024):
        #        _in = sock._conn.recv(1024)
        #        print("event" + self._event)
        #        print(_in)
        #        if(str(_in) == self._event):
        #            print(_in)
        #            return function


    def send_message(self, _msg):
        self._conn.send(_msg.encode('utf-8'))

, поскольку у меня ограниченные знания о том, как работают классы, как если бы я go сделал для этого, у меня есть ConnManger для создания объекта подключения, но я не знаю, откуда go оттуда, как вы можете видеть, я уже пытался добавить метод .on к ConnManager но я просто потерян Возможно ли то, что я спрашиваю? и будет ли это практичным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...