This repository has been archived on 2024-09-10. You can view files and clone it, but cannot push or open issues or pull requests.

74 lines
3.1 KiB
Python

import os
from handler.common import MESSAGE_QUEUE
from messages.control import ControlMessage
from protobuf import message_pb2
from protobuf import wss_pb2
import gzip
from messages.member import MemberMessage
from messages.like import LikeMessage
from messages.roomuserseq import RoomUserSeqMessage
from messages.gift import GiftMessage
from messages.social import SocialMessage
from messages.chat import ChatMessage
from output import OUTPUTER
def loop_queue():
while True:
message = MESSAGE_QUEUE.get()
try:
response = message_pb2.Response()
wss = wss_pb2.WssResponse()
wss.ParseFromString(message.body)
decompressed = gzip.decompress(wss.data)
response.ParseFromString(decompressed)
decodeMsg(response.messages)
except Exception as e:
for output in OUTPUTER:
output.error_output("ParseError", message.body, e)
def decodeMsg(messages):
for message in messages:
try:
if message.method == 'WebcastMemberMessage':
member_message = MemberMessage()
member_message.set_payload(message.payload)
for output in OUTPUTER:
output.member_output(member_message)
elif message.method == 'WebcastSocialMessage':
social_message = SocialMessage()
social_message.set_payload(message.payload)
for output in OUTPUTER:
output.social_output(social_message)
elif message.method == 'WebcastChatMessage':
chat_message = ChatMessage()
chat_message.set_payload(message.payload)
for output in OUTPUTER:
output.chat_output(chat_message)
elif message.method == 'WebcastLikeMessage':
like_message = LikeMessage()
like_message.set_payload(message.payload)
for output in OUTPUTER:
output.like_output(like_message)
elif message.method == 'WebcastGiftMessage':
gift_message = GiftMessage()
gift_message.set_payload(message.payload)
for output in OUTPUTER:
output.gift_output(gift_message)
elif message.method == 'WebcastRoomUserSeqMessage':
room_user_seq_message = RoomUserSeqMessage()
room_user_seq_message.set_payload(message.payload)
for output in OUTPUTER:
output.userseq_output(room_user_seq_message)
elif message.method == 'WebcastControlMessage':
control_message = ControlMessage()
control_message.set_payload(message.payload)
for output in OUTPUTER:
output.control_output(control_message)
else:
for output in OUTPUTER:
output.other_output(message.method, message.payload)
except Exception as e:
for output in OUTPUTER:
output.error_output(message.method, message.payload, e)