Zugriffe auf die Datenstrukturen des Backends werden jetzt über locks
synchronisiert.
This commit is contained in:
@@ -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;
|
||||||
PaintMap(g);
|
lock (Backend) {
|
||||||
|
PaintMap (g);
|
||||||
|
}
|
||||||
buffer.Render();
|
buffer.Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -172,11 +172,15 @@ namespace WorldOfPeacecraft
|
|||||||
switch (block.GetName ()) {
|
switch (block.GetName ()) {
|
||||||
case MessPlayer:
|
case MessPlayer:
|
||||||
Player player = MapPlayer (block);
|
Player player = MapPlayer (block);
|
||||||
Backend.removePlayer (player);
|
lock (Backend) {
|
||||||
|
Backend.removePlayer (player);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MessDragon:
|
case MessDragon:
|
||||||
Dragon dragon = MapDragon (block);
|
Dragon dragon = MapDragon (block);
|
||||||
Backend.removeDragon (dragon);
|
lock (Backend) {
|
||||||
|
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));
|
||||||
}
|
}
|
||||||
Backend.SetMap(map);
|
lock (Backend) {
|
||||||
|
Backend.SetMap (map);
|
||||||
|
}
|
||||||
Backend.RefreshGui();
|
Backend.RefreshGui();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,12 +285,17 @@ namespace WorldOfPeacecraft
|
|||||||
|
|
||||||
private void ProcessPlayer (Block playerBlock)
|
private void ProcessPlayer (Block playerBlock)
|
||||||
{
|
{
|
||||||
Backend.SetPlayer(MapPlayer(playerBlock));
|
lock (Backend) {
|
||||||
|
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,34 +324,46 @@ namespace WorldOfPeacecraft
|
|||||||
|
|
||||||
private void ProcessEntities (Block entitiesBlock)
|
private void ProcessEntities (Block entitiesBlock)
|
||||||
{
|
{
|
||||||
Backend.clearDragons ();
|
// This lock can be placed more efficiently. Does it make sense?
|
||||||
Backend.clearPlayers ();
|
lock (Backend) {
|
||||||
foreach (Block entityBlock in entitiesBlock.GetBlocks ()) {
|
Backend.clearDragons ();
|
||||||
switch (entityBlock.GetName()) {
|
Backend.clearPlayers ();
|
||||||
case MessPlayer:
|
foreach (Block entityBlock in entitiesBlock.GetBlocks ()) {
|
||||||
Backend.SetPlayer(MapPlayer(entityBlock));
|
switch (entityBlock.GetName ()) {
|
||||||
break;
|
case MessPlayer:
|
||||||
case MessDragon:
|
lock (Backend) {
|
||||||
Backend.SetDragon(MapDragon(entityBlock));
|
Backend.SetPlayer (MapPlayer (entityBlock));
|
||||||
break;
|
}
|
||||||
default:
|
break;
|
||||||
ThrowUnknownBlockException(entitiesBlock, entityBlock);
|
case MessDragon:
|
||||||
break;
|
Backend.SetDragon (MapDragon (entityBlock));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ThrowUnknownBlockException (entitiesBlock, entityBlock);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Backend.RefreshGui();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ProcessPlayers (Block playersBlock)
|
private void ProcessPlayers (Block playersBlock)
|
||||||
{
|
{
|
||||||
Backend.clearPlayers ();
|
// This lock can be placed more efficiently. Does it make sense?
|
||||||
foreach (Block playerBlock in playersBlock.GetBlocks ()) {
|
lock (Backend) {
|
||||||
Backend.SetPlayer(MapPlayer(playerBlock));
|
Backend.clearPlayers ();
|
||||||
|
foreach (Block playerBlock in playersBlock.GetBlocks ()) {
|
||||||
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user