Rename "changes" to "diffs" in most places
This commit is contained in:
parent
3cb21c02bc
commit
d68d32ff2f
6 changed files with 82 additions and 71 deletions
50
chunks.py
50
chunks.py
|
|
@ -81,23 +81,23 @@ class ChunkDiff():
|
||||||
|
|
||||||
return ChunkDiff.from_dict(diffs)
|
return ChunkDiff.from_dict(diffs)
|
||||||
|
|
||||||
def jsonify_changes(changes):
|
def jsonify_diffs(diffs):
|
||||||
dchanges = []
|
ddiffs = []
|
||||||
for chunk in changes:
|
for dchunk in diffs:
|
||||||
pos = chunk[0]
|
pos = dchunk[0]
|
||||||
change = chunk[1].to_dict()
|
ddiff = dchunk[1].to_dict()
|
||||||
dchanges.append((pos, change))
|
ddiffs.append((pos, ddiff))
|
||||||
|
|
||||||
return dchanges
|
return ddiffs
|
||||||
|
|
||||||
def dejsonify_changes(dchanges):
|
def dejsonify_diffs(ddiffs):
|
||||||
changes = []
|
diffs = []
|
||||||
for chunk in dchanges:
|
for dchunk in ddiffs:
|
||||||
pos = Position(chunk[0][0], chunk[0][1])
|
pos = Position(dchunk[0][0], dchunk[0][1])
|
||||||
change = ChunkDiff.from_dict(chunk[1])
|
diff = ChunkDiff.from_dict(dchunk[1])
|
||||||
changes.append((pos, change))
|
diffs.append((pos, diff))
|
||||||
|
|
||||||
return changes
|
return diffs
|
||||||
|
|
||||||
class Chunk():
|
class Chunk():
|
||||||
"""
|
"""
|
||||||
|
|
@ -126,6 +126,9 @@ class Chunk():
|
||||||
self.commit_diff(self._modifications)
|
self.commit_diff(self._modifications)
|
||||||
self._modifications = ChunkDiff()
|
self._modifications = ChunkDiff()
|
||||||
|
|
||||||
|
def apply_diff(self, diff):
|
||||||
|
self._modifications.apply(diff)
|
||||||
|
|
||||||
def commit_diff(self, diff):
|
def commit_diff(self, diff):
|
||||||
self._content.apply(diff)
|
self._content.apply(diff)
|
||||||
self._content.clear_deletions()
|
self._content.clear_deletions()
|
||||||
|
|
@ -184,15 +187,20 @@ class ChunkPool():
|
||||||
self.set(pos, chunk)
|
self.set(pos, chunk)
|
||||||
return chunk
|
return chunk
|
||||||
|
|
||||||
def apply_changes(self, changes):
|
def apply_diffs(self, diffs):
|
||||||
for change in changes:
|
for dchunk in diffs:
|
||||||
pos = change[0]
|
pos = dchunk[0]
|
||||||
diff = change[1]
|
diff = dchunk[1]
|
||||||
|
|
||||||
chunk = self.get(pos)
|
chunk = self.get(pos) or self.create(pos)
|
||||||
if not chunk:
|
chunk.apply_diff(diff)
|
||||||
chunk = self.create(pos)
|
|
||||||
|
def commit_diffs(self, diffs):
|
||||||
|
for dchunk in diffs:
|
||||||
|
pos = dchunk[0]
|
||||||
|
diff = dchunk[1]
|
||||||
|
|
||||||
|
chunk = self.get(pos) or self.create(pos)
|
||||||
chunk.commit_diff(diff)
|
chunk.commit_diff(diff)
|
||||||
|
|
||||||
def commit_changes(self):
|
def commit_changes(self):
|
||||||
|
|
|
||||||
12
client.py
12
client.py
|
|
@ -8,7 +8,7 @@ import websocket
|
||||||
from websocket import WebSocketException as WSException
|
from websocket import WebSocketException as WSException
|
||||||
|
|
||||||
from maps import Map, ChunkMap
|
from maps import Map, ChunkMap
|
||||||
from chunks import ChunkDiff, jsonify_changes, dejsonify_changes
|
from chunks import ChunkDiff, jsonify_diffs, dejsonify_diffs
|
||||||
from utils import Position
|
from utils import Position
|
||||||
from clientchunkpool import ClientChunkPool
|
from clientchunkpool import ClientChunkPool
|
||||||
|
|
||||||
|
|
@ -131,8 +131,8 @@ class Client():
|
||||||
|
|
||||||
def handle_json(self, message):
|
def handle_json(self, message):
|
||||||
if message["type"] == "apply-changes":
|
if message["type"] == "apply-changes":
|
||||||
changes = dejsonify_changes(message["data"])
|
diffs = dejsonify_diffs(message["data"])
|
||||||
self.map_.apply_changes(changes)
|
self.map_.commit_diffs(diffs)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.stopping = True
|
self.stopping = True
|
||||||
|
|
@ -147,9 +147,9 @@ class Client():
|
||||||
message = {"type": "unload-chunks", "data": coords}
|
message = {"type": "unload-chunks", "data": coords}
|
||||||
self._ws.send(json.dumps(message))
|
self._ws.send(json.dumps(message))
|
||||||
|
|
||||||
def send_changes(self, changes):
|
def send_changes(self, diffs):
|
||||||
changes = jsonify_changes(changes)
|
diffs = jsonify_diffs(diffs)
|
||||||
message = {"type": "save-changes", "data": changes}
|
message = {"type": "save-changes", "data": diffs}
|
||||||
self._ws.send(json.dumps(message))
|
self._ws.send(json.dumps(message))
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ class ClientChunkPool(ChunkPool):
|
||||||
def set(self, pos, chunk):
|
def set(self, pos, chunk):
|
||||||
super().set(pos, chunk)
|
super().set(pos, chunk)
|
||||||
|
|
||||||
def apply_changes(self, changes):
|
def commit_diffs(self, diffs):
|
||||||
super().apply_changes(changes)
|
super().commit_diffs(diffs)
|
||||||
|
|
||||||
self._client.redraw()
|
self._client.redraw()
|
||||||
|
|
||||||
|
|
@ -29,11 +29,12 @@ class ClientChunkPool(ChunkPool):
|
||||||
self._save_thread.start()
|
self._save_thread.start()
|
||||||
|
|
||||||
def save_changes(self):
|
def save_changes(self):
|
||||||
changes = self.commit_changes()
|
diffs = self.commit_changes()
|
||||||
changes = [chunk for chunk in changes if not chunk[1].empty()]
|
# filter out empty changes/chunks
|
||||||
|
diffs = [dchunk for dchunk in diffs if not dchunk[1].empty()]
|
||||||
|
|
||||||
if changes:
|
if diffs:
|
||||||
self._client.send_changes(changes)
|
self._client.send_changes(diffs)
|
||||||
|
|
||||||
def load(self, pos):
|
def load(self, pos):
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,6 @@ class DBChunkPool(ChunkPool):
|
||||||
A ChunkPool that can load/save chunks from/to a database.
|
A ChunkPool that can load/save chunks from/to a database.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pass
|
#def __init__(self, filename):
|
||||||
|
#super().init()
|
||||||
|
#self._chunkdb = ChunkDB(filename)
|
||||||
|
|
|
||||||
4
maps.py
4
maps.py
|
|
@ -210,9 +210,9 @@ class Map():
|
||||||
|
|
||||||
#self.load_visible()
|
#self.load_visible()
|
||||||
|
|
||||||
def apply_changes(self, changes):
|
def commit_diffs(self, diffs):
|
||||||
with self.chunkpool as pool:
|
with self.chunkpool as pool:
|
||||||
pool.apply_changes(changes)
|
pool.commit_diffs(diffs)
|
||||||
|
|
||||||
ChunkStyle = namedtuple("ChunkStyle", "string color")
|
ChunkStyle = namedtuple("ChunkStyle", "string color")
|
||||||
|
|
||||||
|
|
|
||||||
70
server.py
70
server.py
|
|
@ -5,7 +5,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, jsonify_changes, dejsonify_changes
|
from chunks import ChunkDiff, jsonify_diffs, dejsonify_diffs
|
||||||
from dbchunkpool import DBChunkPool
|
from dbchunkpool import DBChunkPool
|
||||||
|
|
||||||
pool = DBChunkPool()
|
pool = DBChunkPool()
|
||||||
|
|
@ -13,17 +13,17 @@ clients = []
|
||||||
|
|
||||||
class WotServer(WebSocket):
|
class WotServer(WebSocket):
|
||||||
def handle_request_chunks(self, coords):
|
def handle_request_chunks(self, coords):
|
||||||
changes = []
|
diffs = []
|
||||||
with pool:
|
with pool:
|
||||||
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)
|
chunk = pool.get(pos) or pool.create(pos)
|
||||||
changes.append((pos, change.as_diff()))
|
diffs.append((pos, chunk.as_diff()))
|
||||||
|
|
||||||
self.loaded_chunks.add(pos)
|
self.loaded_chunks.add(pos)
|
||||||
|
|
||||||
dchanges = jsonify_changes(changes)
|
ddiffs = jsonify_diffs(diffs)
|
||||||
message = {"type": "apply-changes", "data": dchanges}
|
message = {"type": "apply-changes", "data": ddiffs}
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def handle_unload_chunks(self, coords):
|
def handle_unload_chunks(self, coords):
|
||||||
|
|
@ -32,51 +32,51 @@ class WotServer(WebSocket):
|
||||||
if pos in self.loaded_chunks:
|
if pos in self.loaded_chunks:
|
||||||
self.loaded_chunks.remove(pos)
|
self.loaded_chunks.remove(pos)
|
||||||
|
|
||||||
def handle_save_changes(self, dchanges):
|
def handle_save_changes(self, ddiffs):
|
||||||
changes = dejsonify_changes(dchanges)
|
diffs = dejsonify_diffs(ddiffs)
|
||||||
|
|
||||||
# check whether changes are correct (exclude certain characters)
|
# check whether changes are correct (exclude certain characters)
|
||||||
# if not correct, send corrections them back to sender
|
# if not correct, send corrections them back to sender
|
||||||
legitimate_changes = []
|
legitimate_diffs = []
|
||||||
illegitimate_changes = []
|
illegitimate_diffs = []
|
||||||
for chunk in changes:
|
for dchunk in diffs:
|
||||||
if chunk[1].legitimate():
|
if dchunk[1].legitimate():
|
||||||
legitimate_changes.append(chunk)
|
legitimate_diffs.append(dchunk)
|
||||||
else:
|
else:
|
||||||
illegitimate_changes.append(chunk)
|
illegitimate_diffs.append(dchunk)
|
||||||
|
|
||||||
if legitimate_changes:
|
if legitimate_diffs:
|
||||||
with pool:
|
with pool:
|
||||||
pool.apply_changes(legitimate_changes)
|
pool.apply_diffs(legitimate_diffs)
|
||||||
|
|
||||||
for client in clients:
|
for client in clients:
|
||||||
if client:
|
if client:
|
||||||
client.send_changes(legitimate_changes)
|
client.send_changes(legitimate_diffs)
|
||||||
|
|
||||||
if illegitimate_changes:
|
if illegitimate_diffs:
|
||||||
reverse_changes = self.reverse_changes(changes)
|
reverse_diffs = self.reverse_diffs(illegitimate_diffs)
|
||||||
reverse_dchanges = jsonify_changes(reverse_changes)
|
reverse_ddiffs = jsonify_diffs(reverse_diffs)
|
||||||
message = {"type": "apply-changes", "data": reverse_dchanges}
|
message = {"type": "apply-changes", "data": reverse_ddiffs}
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def reverse_changes(self, changes):
|
def reverse_diffs(self, diffs):
|
||||||
with pool:
|
with pool:
|
||||||
reverse_changes = []
|
reverse_diffs = []
|
||||||
for chunk in changes:
|
for dchunk in diffs:
|
||||||
pos = chunk[0]
|
pos = dchunk[0]
|
||||||
change = chunk[1]
|
diff = dchunk[1]
|
||||||
real_chunk = pool.get(pos) or pool.create(pos)
|
chunk = pool.get(pos) or pool.create(pos)
|
||||||
reverse_change = change.diff(real_chunk.as_diff())
|
reverse_diff = diff.diff(chunk.as_diff())
|
||||||
reverse_changes.append((pos, reverse_change))
|
reverse_diffs.append((pos, reverse_diff))
|
||||||
|
|
||||||
return reverse_changes
|
return reverse_diffs
|
||||||
|
|
||||||
def send_changes(self, changes):
|
def send_changes(self, diffs):
|
||||||
changes = [chunk for chunk in changes if chunk[0] in self.loaded_chunks]
|
diffs = [dchunk for dchunk in diffs if dchunk[0] in self.loaded_chunks]
|
||||||
dchanges = jsonify_changes(changes)
|
ddiffs = jsonify_diffs(diffs)
|
||||||
|
|
||||||
if dchanges:
|
if ddiffs:
|
||||||
message = {"type": "apply-changes", "data": dchanges}
|
message = {"type": "apply-changes", "data": ddiffs}
|
||||||
self.sendMessage(json.dumps(message))
|
self.sendMessage(json.dumps(message))
|
||||||
|
|
||||||
def handleMessage(self):
|
def handleMessage(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue