Zugriffe auf die Datenstrukturen des Backends werden jetzt über locks
synchronisiert.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user