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)