Add items to model, tehsession.json contains example
This commit is contained in:
parent
d386c771f0
commit
de35cfdc13
62
model.py
62
model.py
@ -27,15 +27,19 @@ class Model(object):
|
||||
model["sessions"] = []
|
||||
if "clients" not in model:
|
||||
model["clients"] = []
|
||||
if "items" not in model:
|
||||
model["items"] = []
|
||||
self.sockets = {} # mapping: clientid -> sockets
|
||||
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.items = { item: Item(model = model["items"][item]) for item in model["items"] }
|
||||
self.filename = "tehsession.json"
|
||||
|
||||
def to_json(self):
|
||||
model = {
|
||||
"sessions": {session: self.sessions[session].to_json() for session in self.sessions },
|
||||
"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
|
||||
|
||||
@ -68,6 +72,20 @@ class Model(object):
|
||||
raise Exception("Ownly owner can change 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
|
||||
async def leave_session(self, clientid):
|
||||
client = self.clients[clientid]
|
||||
@ -109,6 +127,20 @@ class Model(object):
|
||||
for socket in self.sockets[clientid]:
|
||||
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):
|
||||
data = {}
|
||||
client = self.clients[clientid]
|
||||
@ -127,7 +159,10 @@ class Model(object):
|
||||
client = self.clients[clientid]
|
||||
session = self.sessions[client.session] if client.session else None
|
||||
if session:
|
||||
await self.send_session_view(clientid)
|
||||
if session.owner == client.id:
|
||||
await self.send_master_view(clientid)
|
||||
else:
|
||||
await self.send_session_view(clientid)
|
||||
else:
|
||||
await self.send_lobby_view(clientid)
|
||||
|
||||
@ -203,3 +238,28 @@ class Client:
|
||||
"session": self.session,
|
||||
}
|
||||
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
|
||||
|
@ -1,4 +1,4 @@
|
||||
var text = document.getElementById("msg").innerText
|
||||
var text = document.getElementById("msg").innerText
|
||||
msg = JSON.parse(text)
|
||||
|
||||
if (msg.hasOwnProperty('username')) {
|
||||
|
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