Log connects and disconnects with a little box drawing art
This commit is contained in:
parent
cc0b22cb82
commit
841adfa28f
1 changed files with 23 additions and 24 deletions
47
server.py
47
server.py
|
|
@ -1,5 +1,6 @@
|
||||||
# import from chunks, dbchunkpool
|
# import from chunks, dbchunkpool
|
||||||
import json
|
import json
|
||||||
|
import threading
|
||||||
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
||||||
|
|
||||||
from utils import Position
|
from utils import Position
|
||||||
|
|
@ -7,7 +8,7 @@ from chunks import ChunkDiff
|
||||||
from dbchunkpool import DBChunkPool
|
from dbchunkpool import DBChunkPool
|
||||||
|
|
||||||
pool = DBChunkPool()
|
pool = DBChunkPool()
|
||||||
clients = set()
|
clients = []
|
||||||
|
|
||||||
class WotServer(WebSocket):
|
class WotServer(WebSocket):
|
||||||
def handle_request_chunks(self, coords):
|
def handle_request_chunks(self, coords):
|
||||||
|
|
@ -22,7 +23,6 @@ class WotServer(WebSocket):
|
||||||
self.loaded_chunks.add(pos)
|
self.loaded_chunks.add(pos)
|
||||||
|
|
||||||
message = {"type": "apply-changes", "data": changes}
|
message = {"type": "apply-changes", "data": changes}
|
||||||
print(f"Message bong sent: {json.dumps(message)}")
|
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def handle_unload_chunks(self, coords):
|
def handle_unload_chunks(self, coords):
|
||||||
|
|
@ -34,7 +34,7 @@ class WotServer(WebSocket):
|
||||||
def handle_save_changes(self, dchanges):
|
def handle_save_changes(self, dchanges):
|
||||||
changes = []
|
changes = []
|
||||||
for chunk in dchanges:
|
for chunk in dchanges:
|
||||||
print("CHUNK!", chunk)
|
#print("CHUNK!", chunk)
|
||||||
pos = Position(chunk[0][0], chunk[0][1])
|
pos = Position(chunk[0][0], chunk[0][1])
|
||||||
change = ChunkDiff.from_dict(chunk[1])
|
change = ChunkDiff.from_dict(chunk[1])
|
||||||
changes.append((pos, change))
|
changes.append((pos, change))
|
||||||
|
|
@ -42,54 +42,53 @@ class WotServer(WebSocket):
|
||||||
with pool:
|
with pool:
|
||||||
pool.apply_changes(changes)
|
pool.apply_changes(changes)
|
||||||
|
|
||||||
#with pool:
|
|
||||||
#for chunk in changes:
|
|
||||||
#print("changed content:", pool.get(chunk[0])._content)
|
|
||||||
|
|
||||||
for client in clients:
|
for client in clients:
|
||||||
client.send_changes(changes)
|
if client:
|
||||||
|
client.send_changes(changes)
|
||||||
|
|
||||||
def send_changes(self, changes):
|
def send_changes(self, changes):
|
||||||
print("NORMAL CHANGES:", changes)
|
|
||||||
dchanges = []
|
dchanges = []
|
||||||
for chunk in changes:
|
for chunk in changes:
|
||||||
pos = chunk[0]
|
pos = chunk[0]
|
||||||
change = chunk[1]
|
change = chunk[1]
|
||||||
if pos in self.loaded_chunks:
|
if pos in self.loaded_chunks:
|
||||||
dchanges.append((pos, change.to_dict()))
|
dchanges.append((pos, change.to_dict()))
|
||||||
print("LOADED CHANGES:", dchanges)
|
|
||||||
|
|
||||||
if dchanges:
|
if dchanges:
|
||||||
print("Changes!")
|
|
||||||
message = {"type": "apply-changes", "data": dchanges}
|
message = {"type": "apply-changes", "data": dchanges}
|
||||||
print("Changes?")
|
|
||||||
print(f"Message bang sent: {json.dumps(message)}")
|
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def handleMessage(self):
|
def handleMessage(self):
|
||||||
message = json.loads(self.data)
|
message = json.loads(self.data)
|
||||||
print(f"message arrived: {message}")
|
|
||||||
if message["type"] == "request-chunks":
|
if message["type"] == "request-chunks":
|
||||||
self.handle_request_chunks(message["data"])
|
self.handle_request_chunks(message["data"])
|
||||||
elif message["type"] == "unload-chunks":
|
elif message["type"] == "unload-chunks":
|
||||||
self.handle_unload_chunks(message["data"])
|
self.handle_unload_chunks(message["data"])
|
||||||
elif message["type"] == "save-changes":
|
elif message["type"] == "save-changes":
|
||||||
self.handle_save_changes(message["data"])
|
self.handle_save_changes(message["data"])
|
||||||
|
|
||||||
print("Message received and dealt with.")
|
|
||||||
#changes = []
|
|
||||||
#for chunk in message["data"]:
|
|
||||||
#pass
|
|
||||||
#self.sendMessage(self.data)
|
|
||||||
|
|
||||||
def handleConnected(self):
|
def handleConnected(self):
|
||||||
print(self.address, 'connected')
|
|
||||||
clients.add(self)
|
|
||||||
self.loaded_chunks = set()
|
self.loaded_chunks = set()
|
||||||
|
|
||||||
|
try:
|
||||||
|
i = clients.index(None)
|
||||||
|
clients[i] = self
|
||||||
|
except ValueError:
|
||||||
|
clients.append(self)
|
||||||
|
i = len(clients) - 1
|
||||||
|
|
||||||
|
graphstr = "".join(["┯" if j == i else ("│" if v else " ") for j, v in enumerate(clients)])
|
||||||
|
print(f"{graphstr} {self.address[0]}")
|
||||||
|
|
||||||
def handleClose(self):
|
def handleClose(self):
|
||||||
print(self.address, 'closed')
|
i = clients.index(self)
|
||||||
clients.remove(self)
|
|
||||||
|
graphstr = "".join(["┷" if j == i else ("│" if v else " ") for j, v in enumerate(clients)])
|
||||||
|
print(f"{graphstr} {self.address[0]}")
|
||||||
|
|
||||||
|
clients[i] = None
|
||||||
|
while clients and not clients[-1]:
|
||||||
|
clients.pop()
|
||||||
|
|
||||||
server = SimpleWebSocketServer('', 8000, WotServer)
|
server = SimpleWebSocketServer('', 8000, WotServer)
|
||||||
server.serveforever()
|
server.serveforever()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue