cshenfu
2023-03-23 71ee526926c17d79fd350a04f949940ef130d2a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from socketIO_client import SocketIO, BaseNamespace
import time
import requests
import logging
# 这里引入四个变量 放在flask里面起一个单独文件防止有坑!
from app.test_report.constant import VIEWER_DATA, TEACHER_DATA, VIEWER_DATA_MUTIL, TEACHER_DATA_MUTIL
logging.getLogger('socketIO-client').setLevel(logging.DEBUG)
logging.basicConfig()  # 调试时候可以自定义日志
 
class TeacherNamespace(BaseNamespace):
    def on_teacher_response(self, *args):
        print('qqq', args, type(args))
 
class ViewerNamespace(BaseNamespace):
    def on_viewer_response(self, *args):
        print(args, type(args))
 
def get_sessionid(userid, roomid):
    pass
 
def on_connect(*args):
    # print(*args)
    print('connect')
 
def on_disconnect():
    print('## disconnect ##')
 
def on_reconnect():
    print('reconnect')
 
def revc_message(*args):  # 这个函数很重要 是socketio监听信息获取的函数, 这里面socketio会自行调用这个函数
    response_data_format = {}
    response_data = eval(args[0])
    print(response_data)
 
def revc_message_mutil(*args):  # 这个函数很重要 是socketio监听信息获取的函数, 这里面socketio会自行调用这个函数
    response_data_format = {}
    response_data = eval(args[0])
    print(response_data)
 
def create_params(userid, roomid):  # 这个方法类似requests库的封装方法 看底层貌似与requests的urllib3方法一样
    vsessionid, tsessionid = get_sessionid(userid, roomid)
    vparams = {
        'sessionid': vsessionid,
    }
    tparams = {
        'sessionid': tsessionid,
    }
    return vparams, tparams
 
def sio(userid, roomid, host=' xxx.net', vparams='', tparams=''):
    if not vparams and not tparams:
        vparams, tparams = create_params(userid, roomid)
    vsocketIO = SocketIO(host, params=vparams)
    tsocketIO = SocketIO(host, params=tparams)
    viewer = vsocketIO.define(ViewerNamespace, path=f'/asjbfasbfk')  # 这个path类似于信道的路径 很重要
    teacher = tsocketIO.define(TeacherNamespace, path=f'/asjbfasbfk')  # 这个path类似于信道的路径 很重要
    viewer.on('connect', on_connect)
    viewer.on('chat_message', revc_message)
    viewer.on('disconnect', on_disconnect)
    viewer.on('reconnect', on_reconnect)
    teacher.on('connect', on_connect)
    teacher.on('chat_message', revc_message)
    teacher.on('disconnect', on_disconnect)
    teacher.on('reconnect', on_reconnect)
    return teacher, vsocketIO, tsocketIO
 
def send_msg(domain_host, featurestype, sendmessage, userid, roomid, timer=1):
    teacher, vsocketIO, tsocketIO = sio(userid, roomid, host=domain_host)
    for i in range(timer):
        teacher.emit('chat_message', f'{sendmessage}', revc_message)
        vsocketIO.wait(seconds=1)
        tsocketIO.wait(seconds=1)
    return VIEWER_DATA, TEACHER_DATA
 
def send_msg_mutil(domain_host, featurestype, sendmessage, userid, roomid, timer=1, vparams='', tparams=''):
    teacher, vsocketIO, tsocketIO = sio(userid, roomid, host=domain_host, vparams=vparams, tparams=tparams)
    for i in range(timer):
        teacher.emit('chat_message', f'{sendmessage}', revc_message_mutil)
        vsocketIO.wait(seconds=1)
        tsocketIO.wait(seconds=1)
    return VIEWER_DATA, TEACHER_DATA
 
def clear_data():
    VIEWER_DATA.clear()
    TEACHER_DATA.clear()
if __name__ == '__main__':
    s = time.time()
    print(send_msg('xxxx.net', 1, '发送信息1', '7848DB3F76g7ts7057F', 'E301DFFFCDDAG7S79GY9A01307461'))
    print(time.time()-s)
    clear_data()