Как сделать сингал сокета для получения данных - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над сообщениями yowsup и python, я сделал сокет-получатель модулем, и бот снова и снова вызывает его, так как есть привязка сокета, он выдает ошибку, что адрес уже используется, которыйОчевидно, что как сделать сигнал Python, который вызывает функцию с определенными параметрами при поступлении данных в сокет

, это модуль по умолчанию, который получает сообщение с помощью @ singal.command_received.connect и вызывает функцию handle.

from app.mac import mac, signals

'''
Signals this module listents to:
1. When a message is received (signals.command_received)
==========================================================
'''
@signals.command_received.connect
def handle(message):
    if message.command == "hi":
        print("Message from %s is %s"% (message.conversation,message))
        hi(message)
        h_send("hello", "917990253661")
    elif message.command == "help":
        help(message)

'''
Actual module code
==========================================================
'''
def hi(message):
    who_name = message.who_name
    answer = "Hi " + who_name
    mac.send_message(answer, message.conversation)
def help(message):
    answer = "I will help you"
    mac.send_message(answer, message.conversation)

Теперь я создал код сокета, который получает данные, и в соответствии с этим я хочу вызвать функцию.что ниже код.

from app.mac import mac, signals

'''
Signals this module listents to:
1. When a message is received (signals.command_received)
==========================================================
'''

import sqlite3, os
from threading import Thread
import pickle
from time import sleep
from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM, SOCK_STREAM

PORT_NUMBER = 3078
SIZE = 1024
hostName = gethostbyname('0.0.0.0')
mySocket = socket(AF_INET, SOCK_DGRAM)
mySocket.bind((hostName, PORT_NUMBER))

def handle():
    try:
        while True:
            print("collecting.....")
            (data, addr) = mySocket.recvfrom(SIZE)
             print("do things")
        pass
    except Exception as mai:
        print("Collect error:", mai)
...