-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapplication.py
89 lines (76 loc) · 2.69 KB
/
application.py
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
import time
from flask import Flask, render_template
from flask_socketio import SocketIO, emit, join_room, leave_room
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
users = []
channels = []
messages = {}
@app.route('/')
def index():
return render_template('index.html', channels=channels)
def message_received():
print('Message received')
@socketio.on('submit display')
def new_display(data):
name = data['display_name']
old_name = data['old_display']
channel = data['current_chan']
print('Display name ' + name + ' submitted')
if name in users:
print('Display name ' + name + ' rejected')
emit('display taken', {'error': 'This display name is already in use'}, callback=message_received())
else:
print('Display name ' + name + ' accepted')
users.append(name)
emit('display set', name, callback=message_received())
emit('name changed', {'name': name, 'old_name': old_name}, room=channel, include_self=False)
@socketio.on('submit channel')
def new_channel(data):
name = data['channel_name']
print('Channel name ' + name + ' submitted')
if name in channels:
print('Channel name ' + name + ' rejected')
emit('channel exists', {'error': 'This channel name already exists'}, callback=message_received())
else:
print('Channel name ' + name + ' accepted')
channels.append(name)
messages[name] = []
emit('channel created', name, callback=message_received(), broadcast=True)
@socketio.on('join channel')
def join_channel(data):
channel = data['channel']
user = data['user']
join_room(channel)
if channel in channels:
message_data = messages[channel]
emit('get messages', message_data, callback=message_received())
emit('user joined', {'user': user}, room=channel, include_self=False)
@socketio.on('leave channel')
def leave_channel(data):
channel = data['channel']
user = data['user']
leave_room(channel)
emit('user left', {'user': user}, room=channel)
@socketio.on('send message')
def send_message(data):
message = data['message']
channel = data['channel']
user = data['user']
timestamp = time.localtime()
timestamp = time.strftime("%H:%M, %d %B", timestamp)
new_message = {
'message': message,
'user': user,
'timestamp': timestamp
}
messages[channel].append(new_message)
if len(messages[channel]) > 100:
messages[channel].pop(0)
emit('new message', new_message, room=channel)
@socketio.on('file upload')
def file_upload(data):
emit('file received', data, room=data['room'])
if __name__ == '__main__':
socketio.run(app, debug=True)