Я работаю над сообщениями 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)