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

@@ -52,7 +52,9 @@ namespace WorldOfPeacecraft
{ {
BufferedGraphics buffer = BufferedGraphicsManager.Current.Allocate (Board.CreateGraphics (), Board.DisplayRectangle); BufferedGraphics buffer = BufferedGraphicsManager.Current.Allocate (Board.CreateGraphics (), Board.DisplayRectangle);
Graphics g = buffer.Graphics; Graphics g = buffer.Graphics;
lock (Backend) {
PaintMap (g); PaintMap (g);
}
buffer.Render(); buffer.Render();
} }

View File

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