Zugriffe auf die Datenstrukturen des Backends werden jetzt über locks

synchronisiert.
This commit is contained in:
2014-05-01 02:09:17 +02:00
parent 3b6f407e1c
commit 98f50d3490
2 changed files with 48 additions and 23 deletions

View File

@@ -172,11 +172,15 @@ namespace WorldOfPeacecraft
switch (block.GetName ()) {
case MessPlayer:
Player player = MapPlayer (block);
Backend.removePlayer (player);
lock (Backend) {
Backend.removePlayer (player);
}
break;
case MessDragon:
Dragon dragon = MapDragon (block);
Backend.removeDragon (dragon);
lock (Backend) {
Backend.removeDragon (dragon);
}
break;
default:
ThrowUnknownBlockException(deleteBlock, block);
@@ -199,7 +203,9 @@ namespace WorldOfPeacecraft
foreach (Block cell in cellsBlock.GetBlocks()) {
map.SetTile(MapMapcell(cell));
}
Backend.SetMap(map);
lock (Backend) {
Backend.SetMap (map);
}
Backend.RefreshGui();
}
@@ -279,12 +285,17 @@ namespace WorldOfPeacecraft
private void ProcessPlayer (Block playerBlock)
{
Backend.SetPlayer(MapPlayer(playerBlock));
lock (Backend) {
Backend.SetPlayer (MapPlayer (playerBlock));
}
}
private void ProcessMapcell (Block mapcellBlock)
{
Backend.getMapObject().SetTile(MapMapcell(mapcellBlock));
Tile tile = MapMapcell (mapcellBlock);
lock (Backend) {
Backend.getMapObject ().SetTile (tile);
}
}
private void ProcessYourid (Block yourIdBlock)
@@ -313,34 +324,46 @@ namespace WorldOfPeacecraft
private void ProcessEntities (Block entitiesBlock)
{
Backend.clearDragons ();
Backend.clearPlayers ();
foreach (Block entityBlock in entitiesBlock.GetBlocks ()) {
switch (entityBlock.GetName()) {
case MessPlayer:
Backend.SetPlayer(MapPlayer(entityBlock));
break;
case MessDragon:
Backend.SetDragon(MapDragon(entityBlock));
break;
default:
ThrowUnknownBlockException(entitiesBlock, entityBlock);
break;
// This lock can be placed more efficiently. Does it make sense?
lock (Backend) {
Backend.clearDragons ();
Backend.clearPlayers ();
foreach (Block entityBlock in entitiesBlock.GetBlocks ()) {
switch (entityBlock.GetName ()) {
case MessPlayer:
lock (Backend) {
Backend.SetPlayer (MapPlayer (entityBlock));
}
break;
case MessDragon:
Backend.SetDragon (MapDragon (entityBlock));
break;
default:
ThrowUnknownBlockException (entitiesBlock, entityBlock);
break;
}
}
Backend.RefreshGui();
}
}
private void ProcessPlayers (Block playersBlock)
{
Backend.clearPlayers ();
foreach (Block playerBlock in playersBlock.GetBlocks ()) {
Backend.SetPlayer(MapPlayer(playerBlock));
// This lock can be placed more efficiently. Does it make sense?
lock (Backend) {
Backend.clearPlayers ();
foreach (Block playerBlock in playersBlock.GetBlocks ()) {
Backend.SetPlayer (MapPlayer (playerBlock));
}
}
}
private void ProcessDragon (Block dragonBlock)
{
Backend.SetDragon(MapDragon(dragonBlock));
Dragon dragon = MapDragon (dragonBlock);
lock (Backend) {
Backend.SetDragon (dragon);
}
}
private Dragon MapDragon (Block dragonBlock)