-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapplication.py
69 lines (53 loc) · 1.64 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
import os
from datetime import datetime
from flask import Flask, jsonify, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
# Configure secret key
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY") or os.urandom(16).__repr__()
socketio = SocketIO(app)
channels = {}
names = []
@app.route("/")
def index():
return render_template("index.html")
@app.route("/initialize", methods=["GET"])
def initialize():
return jsonify({"channels": list(channels), "names": names})
@socketio.on("chat")
def chat(data):
channel = data["channel"]
message = {"name": data["name"], "time": datetime.now().isoformat(' ', 'seconds'), "content": data["content"]}
channels[channel].append(message)
emit("message-broadcast", {"channel": channel, "message": message}, broadcast=True)
@socketio.on("load-messages")
def load_messages(data):
channel = data["channel"]
messages = channels[channel]
emit("messages-loading", {"messages": messages})
@socketio.on("create")
def create(data):
name = data["name"]
purpose = data["purpose"]
success = False
message = ""
if purpose == "name":
if name == "":
message = "name can't be empty"
elif name in names:
message = "name already exists"
else:
success = True
names.append(name)
emit("login", {"name": name})
emit("name", {"name": name}, broadcast=True)
if purpose == "channel":
if name == "":
message = "channel name can't be empty"
elif name in channels.keys():
message = "channel name already exists"
else:
success = True
channels[name] = []
emit("channel", {"name": name}, broadcast=True)
emit("modal", {"success": success, "message": message, "name": name})