Add items to model, tehsession.json contains example
This commit is contained in:
parent
d386c771f0
commit
de35cfdc13
60
model.py
60
model.py
@ -27,15 +27,19 @@ class Model(object):
|
|||||||
model["sessions"] = []
|
model["sessions"] = []
|
||||||
if "clients" not in model:
|
if "clients" not in model:
|
||||||
model["clients"] = []
|
model["clients"] = []
|
||||||
|
if "items" not in model:
|
||||||
|
model["items"] = []
|
||||||
self.sockets = {} # mapping: clientid -> sockets
|
self.sockets = {} # mapping: clientid -> sockets
|
||||||
self.sessions = { session: Session(model = model["sessions"][session]) for session in model["sessions"] }
|
self.sessions = { session: Session(model = model["sessions"][session]) for session in model["sessions"] }
|
||||||
self.clients = { client: Client(model = model["clients"][client]) for client in model["clients"] }
|
self.clients = { client: Client(model = model["clients"][client]) for client in model["clients"] }
|
||||||
|
self.items = { item: Item(model = model["items"][item]) for item in model["items"] }
|
||||||
self.filename = "tehsession.json"
|
self.filename = "tehsession.json"
|
||||||
|
|
||||||
def to_json(self):
|
def to_json(self):
|
||||||
model = {
|
model = {
|
||||||
"sessions": {session: self.sessions[session].to_json() for session in self.sessions },
|
"sessions": {session: self.sessions[session].to_json() for session in self.sessions },
|
||||||
"clients": {client: self.clients[client].to_json() for client in self.clients },
|
"clients": {client: self.clients[client].to_json() for client in self.clients },
|
||||||
|
"items": {item: self.items[item].to_json() for item in self.items },
|
||||||
}
|
}
|
||||||
return model
|
return model
|
||||||
|
|
||||||
@ -68,6 +72,20 @@ class Model(object):
|
|||||||
raise Exception("Ownly owner can change sessionname")
|
raise Exception("Ownly owner can change sessionname")
|
||||||
session.name = sessionname
|
session.name = sessionname
|
||||||
|
|
||||||
|
@ApiMethod
|
||||||
|
async def create_item(self, clientid, name, description, image):
|
||||||
|
client = self.clients[clientid]
|
||||||
|
if not client.session:
|
||||||
|
raise Exception("create_item requires the client to be host. But client is in no session")
|
||||||
|
session = self.sessions[client.session]
|
||||||
|
if (session.owner != client.id):
|
||||||
|
raise Exception("create_item requires the client to be host. But client is not the owner")
|
||||||
|
if not name:
|
||||||
|
raise Exception("create_item requires an item name")
|
||||||
|
item = Item(name = name, description = description, image = image)
|
||||||
|
self.items[item.id] = item
|
||||||
|
|
||||||
|
|
||||||
@ApiMethod
|
@ApiMethod
|
||||||
async def leave_session(self, clientid):
|
async def leave_session(self, clientid):
|
||||||
client = self.clients[clientid]
|
client = self.clients[clientid]
|
||||||
@ -109,6 +127,20 @@ class Model(object):
|
|||||||
for socket in self.sockets[clientid]:
|
for socket in self.sockets[clientid]:
|
||||||
await socket.send_json(data)
|
await socket.send_json(data)
|
||||||
|
|
||||||
|
async def send_master_view(self, clientid):
|
||||||
|
data = {}
|
||||||
|
client = self.clients[clientid]
|
||||||
|
session = self.sessions[client.session]
|
||||||
|
|
||||||
|
data["view"] = "master"
|
||||||
|
data["username"] = client.name
|
||||||
|
data["session"] = session.to_json()
|
||||||
|
data["items"] = self.to_json()["items"]
|
||||||
|
|
||||||
|
for socket in self.sockets[clientid]:
|
||||||
|
await socket.send_json(data)
|
||||||
|
|
||||||
|
|
||||||
async def send_session_view(self, clientid):
|
async def send_session_view(self, clientid):
|
||||||
data = {}
|
data = {}
|
||||||
client = self.clients[clientid]
|
client = self.clients[clientid]
|
||||||
@ -127,6 +159,9 @@ class Model(object):
|
|||||||
client = self.clients[clientid]
|
client = self.clients[clientid]
|
||||||
session = self.sessions[client.session] if client.session else None
|
session = self.sessions[client.session] if client.session else None
|
||||||
if session:
|
if session:
|
||||||
|
if session.owner == client.id:
|
||||||
|
await self.send_master_view(clientid)
|
||||||
|
else:
|
||||||
await self.send_session_view(clientid)
|
await self.send_session_view(clientid)
|
||||||
else:
|
else:
|
||||||
await self.send_lobby_view(clientid)
|
await self.send_lobby_view(clientid)
|
||||||
@ -203,3 +238,28 @@ class Client:
|
|||||||
"session": self.session,
|
"session": self.session,
|
||||||
}
|
}
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
class Item:
|
||||||
|
|
||||||
|
def __init__(self, model = None, name = None, description = "", image = ""):
|
||||||
|
if model:
|
||||||
|
self.id = model["id"]
|
||||||
|
self.name = model["name"]
|
||||||
|
self.description = model["description"]
|
||||||
|
self.image = model["image"]
|
||||||
|
elif name:
|
||||||
|
self.id = generate_random_id()
|
||||||
|
self.name = name
|
||||||
|
self.description = description
|
||||||
|
self.image = image
|
||||||
|
else:
|
||||||
|
raise Exception("Illegal Item Constructor")
|
||||||
|
|
||||||
|
def to_json(self):
|
||||||
|
model = {
|
||||||
|
"id": self.id,
|
||||||
|
"name": self.name,
|
||||||
|
"description": self.description,
|
||||||
|
"image": self.image,
|
||||||
|
}
|
||||||
|
return model
|
||||||
|
55
static/views/master/script.js
Normal file
55
static/views/master/script.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
var text = document.getElementById("msg").innerText
|
||||||
|
msg = JSON.parse(text)
|
||||||
|
|
||||||
|
document.getElementById("btn-leave-session").onclick = async (e) => await fetch('api/leave_session', {
|
||||||
|
method: 'POST', body: JSON.stringify({})
|
||||||
|
});
|
||||||
|
var session = msg.session;
|
||||||
|
document.getElementById("session").innerText = session["name"];
|
||||||
|
document.getElementById('label-username').innerText = msg.username;
|
||||||
|
|
||||||
|
document.getElementById("btn-gen-item").onclick = async (e) => {
|
||||||
|
name = document.getElementById("input-gen-item-name").value;
|
||||||
|
description = document.getElementById("input-gen-item-description").value;
|
||||||
|
image = document.getElementById("input-gen-item-image").value;
|
||||||
|
if (Boolean(name)) {
|
||||||
|
await fetch('api/create_item', { method: 'POST', body: JSON.stringify(
|
||||||
|
{'name': name, 'description': description, 'image': image}
|
||||||
|
)});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var itemsdiv = document.getElementById("items");
|
||||||
|
var items = msg.items;
|
||||||
|
|
||||||
|
while (itemsdiv.children.length) itemsdiv.lastChild.remove();
|
||||||
|
|
||||||
|
Object.keys(items).forEach( item => {
|
||||||
|
var item = items[item];
|
||||||
|
const itemdiv = document.createElement('div');
|
||||||
|
var name = item["name"]
|
||||||
|
var description = item["description"]
|
||||||
|
var image = item["image"] || "../static/empty.jpg"
|
||||||
|
|
||||||
|
namespan = document.createElement('b');
|
||||||
|
namespan.innerText = name;
|
||||||
|
namespan.style.display = "block"
|
||||||
|
namespan.style.textAlign = "center"
|
||||||
|
|
||||||
|
descriptionspan = document.createElement('span');
|
||||||
|
descriptionspan.innerText = description;
|
||||||
|
descriptionspan.style.display = "block"
|
||||||
|
descriptionspan.style.width = "8rem";
|
||||||
|
|
||||||
|
imageimg = document.createElement('img');
|
||||||
|
imageimg.src = image;
|
||||||
|
imageimg.style.width = "8rem";
|
||||||
|
imageimg.style.display = "block"
|
||||||
|
|
||||||
|
itemdiv.appendChild(namespan);
|
||||||
|
itemdiv.appendChild(imageimg);
|
||||||
|
itemdiv.appendChild(descriptionspan);
|
||||||
|
itemdiv.style.display = "inline-block"
|
||||||
|
|
||||||
|
itemsdiv.appendChild(itemdiv);
|
||||||
|
|
||||||
|
});
|
12
static/views/master/template.html
Normal file
12
static/views/master/template.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Welcome to <b id="session"></b>, lobbymaster <span id="label-username"></span>
|
||||||
|
<br><br>
|
||||||
|
<button id="btn-leave-session">Leave Session</button>
|
||||||
|
|
||||||
|
<div id="div-gen-item">
|
||||||
|
Name: <input id="input-gen-item-name" /> <br>
|
||||||
|
Description: <input id="input-gen-item-description" /> <br>
|
||||||
|
Image: <input id="input-gen-item-image" /> <br>
|
||||||
|
<button id="btn-gen-item">Create item</button>
|
||||||
|
</div>
|
||||||
|
<div id="items">
|
||||||
|
</div>
|
@ -1 +1,42 @@
|
|||||||
{"sessions": {"2b7jrklcn6eulwbw": {"id": "2b7jrklcn6eulwbw", "name": "die neue session", "clients": ["fjvkc3whtpbi7oo2", "bkrqopf5j6q3tpta"], "owner": "bkrqopf5j6q3tpta"}, "omg2h5imnh5nk42i": {"id": "omg2h5imnh5nk42i", "name": "meine sess", "clients": [], "owner": "bkrqopf5j6q3tpta"}, "vc7bn2t76hmjexjz": {"id": "vc7bn2t76hmjexjz", "name": "meine", "clients": [], "owner": "bkrqopf5j6q3tpta"}, "csbbc4gb4lc3jxby": {"id": "csbbc4gb4lc3jxby", "name": "meine", "clients": [], "owner": "bkrqopf5j6q3tpta"}, "jjfqw3itbsh3ylna": {"id": "jjfqw3itbsh3ylna", "name": "uiae", "clients": [], "owner": "fjvkc3whtpbi7oo2"}, "bjgdd4qfpzmnhfka": {"id": "bjgdd4qfpzmnhfka", "name": "eueue", "clients": [], "owner": "bkrqopf5j6q3tpta"}}, "clients": {"bkrqopf5j6q3tpta": {"id": "bkrqopf5j6q3tpta", "name": "dominic", "session": ""}, "cho2o2ntflm4mq3u": {"id": "cho2o2ntflm4mq3u", "name": "uiae", "session": ""}, "fjvkc3whtpbi7oo2": {"id": "fjvkc3whtpbi7oo2", "name": "Me", "session": "2b7jrklcn6eulwbw"}}}
|
{
|
||||||
|
"sessions": {
|
||||||
|
"2b7jrklcn6eulwbw": {
|
||||||
|
"id": "2b7jrklcn6eulwbw",
|
||||||
|
"name": "Die coole session von Player 1",
|
||||||
|
"clients": [],
|
||||||
|
"owner": "bkrqopf5j6q3tpta"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clients": {
|
||||||
|
"bkrqopf5j6q3tpta": {
|
||||||
|
"id": "bkrqopf5j6q3tpta",
|
||||||
|
"name": "Player 1",
|
||||||
|
"session": ""
|
||||||
|
},
|
||||||
|
"cho2o2ntflm4mq3u": {
|
||||||
|
"id": "cho2o2ntflm4mq3u",
|
||||||
|
"name": "uiae",
|
||||||
|
"session": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"hr3gqfed4zelzdcz": {
|
||||||
|
"id": "hr3gqfed4zelzdcz",
|
||||||
|
"name": "Revive",
|
||||||
|
"description": "Revives a KO pokemon and brings it to 50% health",
|
||||||
|
"image": "https://1.bp.blogspot.com/-Hz8sIf0g7cY/VsyVIWiLsnI/AAAAAAAAnII/DjW20xLr0R4/s1600/max_revive_by_peetzaahhh2010-d8oki1o.png"
|
||||||
|
},
|
||||||
|
"7htnswtslkla6rqh": {
|
||||||
|
"id": "7htnswtslkla6rqh",
|
||||||
|
"name": "Potion",
|
||||||
|
"description": "Heals your Pokey-Man by 20 hp",
|
||||||
|
"image": "https://cdn.bulbagarden.net/upload/thumb/4/45/PotionBaseSet94.jpg/200px-PotionBaseSet94.jpg"
|
||||||
|
},
|
||||||
|
"tuqjjll2cltlw6i6": {
|
||||||
|
"id": "tuqjjll2cltlw6i6",
|
||||||
|
"name": "Revive\u2122",
|
||||||
|
"description": "When mom tells you that there is Max-Revive at home",
|
||||||
|
"image": "https://www.pokewiki.de/images/5/58/Vitalkraut_Traumwelt.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user