Completed
Push — master ( a8c52a...feff49 )
by Andrew
29s
created

WebRtcMessageCreator.__init__()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
1
from chat.models import get_milliseconds
2
from chat.tornado.constants import VarNames, HandlerNames, Actions, RedisPrefix
3
from chat.tornado.image_utils import prepare_img
4
5
6
class MessagesCreator(object):
7
8
	def default(self, content, event, handler):
9
		"""
10
		:return: {"action": event, "content": content, "time": "20:48:57"}
11
		"""
12
		return {
13
			VarNames.EVENT: event,
14
			VarNames.CONTENT: content,
15
			VarNames.USER_ID: self.user_id,
16
			VarNames.TIME: get_milliseconds(),
17
			VarNames.HANDLER_NAME: handler
18
		}
19
20
	@staticmethod
21
	def set_ws_id(random, self_id):
22
		return {
23
			VarNames.HANDLER_NAME: HandlerNames.WS,
24
			VarNames.EVENT: Actions.SET_WS_ID,
25
			VarNames.CONTENT: random,
26
			VarNames.WEBRTC_OPPONENT_ID: self_id
27
		}
28
29
	def room_online(self, online, event, channel):
30
		"""
31
		:return: {"action": event, "content": content, "time": "20:48:57"}
32
		"""
33
		room_less = self.default(online, event, HandlerNames.CHAT)
34
		room_less[VarNames.CHANNEL_NAME] = channel
35
		room_less[VarNames.USER] = self.sender_name
36
		room_less[VarNames.GENDER] = self.sex
37
		return room_less
38
39
	@classmethod
40
	def create_message(cls, message, images):
41
		res = {
42
			VarNames.USER_ID: message.sender_id,
43
			VarNames.CONTENT: message.content,
44
			VarNames.TIME: message.time,
45
			VarNames.MESSAGE_ID: message.id,
46
			VarNames.IMG: images
47
		}
48
		return res
49
50
	@classmethod
51
	def create_send_message(cls, message, event, imgs):
52
		"""
53
		:type message: chat.models.Message
54
		:type imgs: dict
55
		:type event: Actions
56
		:return: "action": "joined", "content": {"v5bQwtWp": "alien", "tRD6emzs": "Alien"},
57
		"sex": "Alien", "user": "tRD6emzs", "time": "20:48:57"}
58
		"""
59
		res = cls.create_message(message, imgs)
60
		res[VarNames.EVENT] = event
61
		res[VarNames.CHANNEL] = message.room_id
62
		res[VarNames.SYMBOL] = message.symbol
63
		res[VarNames.HANDLER_NAME] = HandlerNames.CHAT
64
		return res
65
66
	@classmethod
67
	def append_images(cls, messages, images):
68
		"""
69
		:type messages: list[chat.models.Message] 
70
		:type images: list[chat.models.Image] 
71
		"""
72
		res_mess = []
73
		for message in messages:
74
			res_images = prepare_img(images, message.id)
75
			res_mess.append(cls.create_message(message, res_images))
76
		return res_mess
77
78
	@classmethod
79
	def get_messages(cls, messages, channel, images):
80
		"""
81
		:type images: list[chat.models.Image]
82
		:type messages: list[chat.models.Message]
83
		:type channel: str
84
		"""
85
		return {
86
			VarNames.CONTENT: cls.append_images(messages, images),
87
			VarNames.EVENT: Actions.GET_MESSAGES,
88
			VarNames.CHANNEL: channel,
89
			VarNames.HANDLER_NAME: HandlerNames.CHAT
90
		}
91
92
	@property
93
	def channel(self):
94
		return RedisPrefix.generate_user(self.user_id)
95
96
	def subscribe_direct_channel_message(self, room_id, other_user_id):
97
		return {
98
			VarNames.EVENT: Actions.CREATE_DIRECT_CHANNEL,
99
			VarNames.ROOM_ID: room_id,
100
			VarNames.ROOM_USERS: [self.user_id, other_user_id],
101
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS
102
		}
103
104
	def subscribe_room_channel_message(self, room_id, room_name):
105
		return {
106
			VarNames.EVENT: Actions.CREATE_ROOM_CHANNEL,
107
			VarNames.ROOM_ID: room_id,
108
			VarNames.ROOM_USERS: [self.user_id],
109
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
110
			VarNames.ROOM_NAME: room_name
111
		}
112
113
	@staticmethod
114
	def invite_room_channel_message(room_id, user_id, room_name, users):
115
		return {
116
			VarNames.EVENT: Actions.INVITE_USER,
117
			VarNames.ROOM_ID: room_id,
118
			VarNames.USER_ID: user_id,
119
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
120
			VarNames.ROOM_NAME: room_name,
121
			VarNames.CONTENT: users
122
		}
123
124
	@staticmethod
125
	def add_user_to_room(channel, user_id, content):
126
		return {
127
			VarNames.EVENT: Actions.ADD_USER,
128
			VarNames.CHANNEL: channel,
129
			VarNames.USER_ID: user_id,
130
			VarNames.HANDLER_NAME: HandlerNames.CHAT,
131
			VarNames.GENDER: content[VarNames.GENDER],  # SEX: 'Alien', USER: 'Andrew'
132
			VarNames.USER: content[VarNames.USER]  # SEX: 'Alien', USER: 'Andrew'
133
		}
134
135
	def unsubscribe_direct_message(self, room_id):
136
		return {
137
			VarNames.EVENT: Actions.DELETE_ROOM,
138
			VarNames.ROOM_ID: room_id,
139
			VarNames.USER_ID: self.user_id,
140
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
141
			VarNames.TIME: get_milliseconds()
142
		}
143
144
	def load_offline_message(self, offline_messages, channel_key):
145
		res = self.default(offline_messages, Actions.OFFLINE_MESSAGES, HandlerNames.CHAT)
146
		res[VarNames.CHANNEL] = channel_key
147
		return res
148
149
150
class WebRtcMessageCreator(object):
151
152
	def offer_webrtc(self, content, connection_id, room_id, action):
153
		"""
154
		:return: {"action": "call", "content": content, "time": "20:48:57"}
155
		"""
156
		return {
157
			VarNames.EVENT: action,
158
			VarNames.CONTENT: content,
159
			VarNames.USER_ID: self.user_id,
160
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC,
161
			VarNames.USER: self.sender_name,
162
			VarNames.CONNECTION_ID: connection_id,
163
			VarNames.WEBRTC_OPPONENT_ID: self.id,
164
			VarNames.CHANNEL: room_id
165
		}
166
167
	def set_webrtc_error(self, error, connection_id, qued_id=None):
168
		return {
169
			VarNames.EVENT: Actions.SET_WEBRTC_ERROR,
170
			VarNames.CONTENT: error,
171
			VarNames.USER_ID: self.user_id,
172
			VarNames.HANDLER_NAME: HandlerNames.PEER_CONNECTION,
173
			VarNames.CONNECTION_ID: connection_id,
174
			VarNames.WEBRTC_QUED_ID: qued_id
175
		}
176
177
	@staticmethod
178
	def set_connection_id(qued_id, connection_id):
179
		return {
180
			VarNames.EVENT: Actions.SET_WEBRTC_ID,
181
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC,
182
			VarNames.CONNECTION_ID: connection_id,
183
			VarNames.WEBRTC_QUED_ID: qued_id
184
		}
185
186
	def get_close_file_sender_message(self, connection_id):
187
		return {
188
			VarNames.EVENT: Actions.CLOSE_FILE_CONNECTION,
189
			VarNames.CONNECTION_ID: connection_id,
190
			VarNames.WEBRTC_OPPONENT_ID: self.id,
191
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC_TRANSFER,
192
		}
193
194
	def get_accept_file_message(self, connection_id):
195
		return {
196
			VarNames.EVENT: Actions.ACCEPT_FILE,
197
			VarNames.CONNECTION_ID: connection_id,
198
			VarNames.WEBRTC_OPPONENT_ID: self.id,
199
			VarNames.HANDLER_NAME: HandlerNames.PEER_CONNECTION,
200
		}
201
202
	def reply_webrtc(self, event, connection_id, handler):
203
		return {
204
			VarNames.EVENT: event,
205
			VarNames.CONNECTION_ID: connection_id,
206
			VarNames.USER_ID: self.user_id,
207
			VarNames.USER: self.sender_name,
208
			VarNames.WEBRTC_OPPONENT_ID: self.id,
209
			VarNames.HANDLER_NAME: handler,
210
		}
211