Completed
Push — master ( 78c1f7...a4dd93 )
by Andrew
26s
created

MessagesCreator.responde_pong()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
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 responde_pong(self):
105
		return {
106
			VarNames.EVENT: Actions.PING,
107
			VarNames.HANDLER_NAME: HandlerNames.WS
108
		}
109
110
	def subscribe_room_channel_message(self, room_id, room_name):
111
		return {
112
			VarNames.EVENT: Actions.CREATE_ROOM_CHANNEL,
113
			VarNames.ROOM_ID: room_id,
114
			VarNames.ROOM_USERS: [self.user_id],
115
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
116
			VarNames.ROOM_NAME: room_name
117
		}
118
119
	@staticmethod
120
	def invite_room_channel_message(room_id, user_id, room_name, users):
121
		return {
122
			VarNames.EVENT: Actions.INVITE_USER,
123
			VarNames.ROOM_ID: room_id,
124
			VarNames.USER_ID: user_id,
125
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
126
			VarNames.ROOM_NAME: room_name,
127
			VarNames.CONTENT: users
128
		}
129
130
	@staticmethod
131
	def add_user_to_room(channel, user_id, content):
132
		return {
133
			VarNames.EVENT: Actions.ADD_USER,
134
			VarNames.CHANNEL: channel,
135
			VarNames.USER_ID: user_id,
136
			VarNames.HANDLER_NAME: HandlerNames.CHAT,
137
			VarNames.GENDER: content[VarNames.GENDER],  # SEX: 'Alien', USER: 'Andrew'
138
			VarNames.USER: content[VarNames.USER]  # SEX: 'Alien', USER: 'Andrew'
139
		}
140
141
	def unsubscribe_direct_message(self, room_id):
142
		return {
143
			VarNames.EVENT: Actions.DELETE_ROOM,
144
			VarNames.ROOM_ID: room_id,
145
			VarNames.USER_ID: self.user_id,
146
			VarNames.HANDLER_NAME: HandlerNames.CHANNELS,
147
			VarNames.TIME: get_milliseconds()
148
		}
149
150
	def load_offline_message(self, offline_messages, channel_key):
151
		res = self.default(offline_messages, Actions.OFFLINE_MESSAGES, HandlerNames.CHAT)
152
		res[VarNames.CHANNEL] = channel_key
153
		return res
154
155
156
class WebRtcMessageCreator(object):
157
158
	def offer_webrtc(self, content, connection_id, room_id, action):
159
		"""
160
		:return: {"action": "call", "content": content, "time": "20:48:57"}
161
		"""
162
		return {
163
			VarNames.EVENT: action,
164
			VarNames.CONTENT: content,
165
			VarNames.USER_ID: self.user_id,
166
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC,
167
			VarNames.USER: self.sender_name,
168
			VarNames.CONNECTION_ID: connection_id,
169
			VarNames.WEBRTC_OPPONENT_ID: self.id,
170
			VarNames.CHANNEL: room_id
171
		}
172
173
	def set_webrtc_error(self, error, connection_id, qued_id=None):
174
		return {
175
			VarNames.EVENT: Actions.SET_WEBRTC_ERROR,
176
			VarNames.CONTENT: error,
177
			VarNames.USER_ID: self.user_id,
178
			VarNames.HANDLER_NAME: HandlerNames.PEER_CONNECTION,
179
			VarNames.CONNECTION_ID: connection_id,
180
			VarNames.WEBRTC_QUED_ID: qued_id
181
		}
182
183
	@staticmethod
184
	def set_connection_id(qued_id, connection_id):
185
		return {
186
			VarNames.EVENT: Actions.SET_WEBRTC_ID,
187
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC,
188
			VarNames.CONNECTION_ID: connection_id,
189
			VarNames.WEBRTC_QUED_ID: qued_id
190
		}
191
192
	def get_close_file_sender_message(self, connection_id):
193
		return {
194
			VarNames.EVENT: Actions.CLOSE_FILE_CONNECTION,
195
			VarNames.CONNECTION_ID: connection_id,
196
			VarNames.WEBRTC_OPPONENT_ID: self.id,
197
			VarNames.HANDLER_NAME: HandlerNames.WEBRTC_TRANSFER,
198
		}
199
200
	def get_accept_file_message(self, connection_id, content):
201
		return {
202
			VarNames.EVENT: Actions.ACCEPT_FILE,
203
			VarNames.CONNECTION_ID: connection_id,
204
			VarNames.WEBRTC_OPPONENT_ID: self.id,
205
			VarNames.HANDLER_NAME: HandlerNames.PEER_CONNECTION,
206
			VarNames.CONTENT: content,
207
		}
208
209
	def reply_webrtc(self, event, connection_id, handler, content):
210
		return {
211
			VarNames.EVENT: event,
212
			VarNames.CONNECTION_ID: connection_id,
213
			VarNames.USER_ID: self.user_id,
214
			VarNames.USER: self.sender_name,
215
			VarNames.CONTENT: content,
216
			VarNames.WEBRTC_OPPONENT_ID: self.id,
217
			VarNames.HANDLER_NAME: handler,
218
		}
219
220
	def retry_file(self, connection_id):
221
		return {
222
			VarNames.EVENT: Actions.RETRY_FILE_CONNECTION,
223
			VarNames.CONNECTION_ID: connection_id,
224
			VarNames.WEBRTC_OPPONENT_ID: self.id,
225
			VarNames.HANDLER_NAME: HandlerNames.PEER_CONNECTION,
226
		}
227