Clean up server code
This commit is contained in:
parent
841adfa28f
commit
7bec555e3b
2 changed files with 26 additions and 27 deletions
27
chunks.py
27
chunks.py
|
|
@ -2,8 +2,6 @@ import threading
|
||||||
import time
|
import time
|
||||||
from utils import CHUNK_WIDTH, CHUNK_HEIGHT, Position
|
from utils import CHUNK_WIDTH, CHUNK_HEIGHT, Position
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
class ChunkDiff():
|
class ChunkDiff():
|
||||||
"""
|
"""
|
||||||
Represents differences between two chunks (changes to be made to a chunk).
|
Represents differences between two chunks (changes to be made to a chunk).
|
||||||
|
|
@ -67,7 +65,24 @@ class ChunkDiff():
|
||||||
|
|
||||||
def empty(self):
|
def empty(self):
|
||||||
return not bool(self._chars)
|
return not bool(self._chars)
|
||||||
|
|
||||||
|
def jsonify_changes(changes):
|
||||||
|
dchanges = []
|
||||||
|
for chunk in changes:
|
||||||
|
pos = chunk[0]
|
||||||
|
change = chunk[1].to_dict()
|
||||||
|
dchanges.append((pos, change))
|
||||||
|
|
||||||
|
return dchanges
|
||||||
|
|
||||||
|
def dejsonify_changes(dchanges):
|
||||||
|
changes = []
|
||||||
|
for chunk in dchanges:
|
||||||
|
pos = Position(chunk[0][0], chunk[0][1])
|
||||||
|
change = ChunkDiff.from_dict(chunk[1])
|
||||||
|
changes.append((pos, change))
|
||||||
|
|
||||||
|
return changes
|
||||||
|
|
||||||
class Chunk():
|
class Chunk():
|
||||||
"""
|
"""
|
||||||
|
|
@ -116,11 +131,6 @@ class Chunk():
|
||||||
def age(self, now=None):
|
def age(self, now=None):
|
||||||
return self.last_modified - (now or time.time())
|
return self.last_modified - (now or time.time())
|
||||||
|
|
||||||
#def draw_to(self, x, y, window):
|
|
||||||
#for line in self._content.combine(self._modifications).lines():
|
|
||||||
#window.addstr(y, x, line)
|
|
||||||
#y += 1
|
|
||||||
|
|
||||||
def lines(self):
|
def lines(self):
|
||||||
return self.as_diff().lines()
|
return self.as_diff().lines()
|
||||||
|
|
||||||
|
|
@ -161,7 +171,6 @@ class ChunkPool():
|
||||||
|
|
||||||
def apply_changes(self, changes):
|
def apply_changes(self, changes):
|
||||||
for change in changes:
|
for change in changes:
|
||||||
#pos = Position(change[0][0], change[0][1])
|
|
||||||
pos = change[0]
|
pos = change[0]
|
||||||
diff = change[1]
|
diff = change[1]
|
||||||
|
|
||||||
|
|
@ -169,9 +178,7 @@ class ChunkPool():
|
||||||
if not chunk:
|
if not chunk:
|
||||||
chunk = self.create(pos)
|
chunk = self.create(pos)
|
||||||
|
|
||||||
sys.stderr.write(f"Previous at {pos}: {chunk._content}\n")
|
|
||||||
chunk.commit_diff(diff)
|
chunk.commit_diff(diff)
|
||||||
sys.stderr.write(f"Afterwrd at {pos}: {chunk._content}\n")
|
|
||||||
|
|
||||||
def commit_changes(self):
|
def commit_changes(self):
|
||||||
changes = []
|
changes = []
|
||||||
|
|
|
||||||
26
server.py
26
server.py
|
|
@ -4,7 +4,7 @@ import threading
|
||||||
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
||||||
|
|
||||||
from utils import Position
|
from utils import Position
|
||||||
from chunks import ChunkDiff
|
from chunks import ChunkDiff, jsonify_changes, dejsonify_changes
|
||||||
from dbchunkpool import DBChunkPool
|
from dbchunkpool import DBChunkPool
|
||||||
|
|
||||||
pool = DBChunkPool()
|
pool = DBChunkPool()
|
||||||
|
|
@ -17,12 +17,12 @@ class WotServer(WebSocket):
|
||||||
for coor in coords:
|
for coor in coords:
|
||||||
pos = Position(coor[0], coor[1])
|
pos = Position(coor[0], coor[1])
|
||||||
change = pool.get(pos) or pool.create(pos)
|
change = pool.get(pos) or pool.create(pos)
|
||||||
dchange = change.as_diff().to_dict()
|
changes.append((pos, change.as_diff()))
|
||||||
changes.append((pos, dchange))
|
|
||||||
|
|
||||||
self.loaded_chunks.add(pos)
|
self.loaded_chunks.add(pos)
|
||||||
|
|
||||||
message = {"type": "apply-changes", "data": changes}
|
dchanges = jsonify_changes(changes)
|
||||||
|
message = {"type": "apply-changes", "data": dchanges}
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def handle_unload_chunks(self, coords):
|
def handle_unload_chunks(self, coords):
|
||||||
|
|
@ -32,12 +32,7 @@ class WotServer(WebSocket):
|
||||||
self.loaded_chunks.remove(pos)
|
self.loaded_chunks.remove(pos)
|
||||||
|
|
||||||
def handle_save_changes(self, dchanges):
|
def handle_save_changes(self, dchanges):
|
||||||
changes = []
|
changes = dejsonify_changes(dchanges)
|
||||||
for chunk in dchanges:
|
|
||||||
#print("CHUNK!", chunk)
|
|
||||||
pos = Position(chunk[0][0], chunk[0][1])
|
|
||||||
change = ChunkDiff.from_dict(chunk[1])
|
|
||||||
changes.append((pos, change))
|
|
||||||
|
|
||||||
with pool:
|
with pool:
|
||||||
pool.apply_changes(changes)
|
pool.apply_changes(changes)
|
||||||
|
|
@ -47,12 +42,8 @@ class WotServer(WebSocket):
|
||||||
client.send_changes(changes)
|
client.send_changes(changes)
|
||||||
|
|
||||||
def send_changes(self, changes):
|
def send_changes(self, changes):
|
||||||
dchanges = []
|
changes = [chunk for chunk in changes if chunk[0] in self.loaded_chunks]
|
||||||
for chunk in changes:
|
dchanges = jsonify_changes(changes)
|
||||||
pos = chunk[0]
|
|
||||||
change = chunk[1]
|
|
||||||
if pos in self.loaded_chunks:
|
|
||||||
dchanges.append((pos, change.to_dict()))
|
|
||||||
|
|
||||||
if dchanges:
|
if dchanges:
|
||||||
message = {"type": "apply-changes", "data": dchanges}
|
message = {"type": "apply-changes", "data": dchanges}
|
||||||
|
|
@ -84,7 +75,8 @@ class WotServer(WebSocket):
|
||||||
i = clients.index(self)
|
i = clients.index(self)
|
||||||
|
|
||||||
graphstr = "".join(["┷" if j == i else ("│" if v else " ") for j, v in enumerate(clients)])
|
graphstr = "".join(["┷" if j == i else ("│" if v else " ") for j, v in enumerate(clients)])
|
||||||
print(f"{graphstr} {self.address[0]}")
|
print(graphstr)
|
||||||
|
#print(f"{graphstr} {self.address[0]}")
|
||||||
|
|
||||||
clients[i] = None
|
clients[i] = None
|
||||||
while clients and not clients[-1]:
|
while clients and not clients[-1]:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue