private GameCoreInstruction interpretNetworkMessage( NetworkMessage nm )
	{
		if ( nm.getMessage().isEmpty() )
			return GameCore.getInstanceOfGameCore().new EmptyGameCoreInstruction();
		
		if ( nm.getMessage().equals("nextGameState") )
			return GameCore.getInstanceOfGameCore().new NextGameStateGameCoreInstruction();
		
		if ( nm.getMessage().startsWith("click:") )
		{
			String[] tmp = nm.getMessage().split(":");
			Point boardIndices = new Point( Integer.parseInt(tmp[1]), Integer.parseInt(tmp[2]) );
			
			//if the server got this message from a client: he needs to broadcast it to all clients (including the one who sent this):
			if ( isServer ) 
			{
				NetworkMessage newNetworkMessage = new NetworkMessage( nm.getMessage(), null ); //ensure broadcasting to all clients:
				futureSendNetworkMessage( newNetworkMessage );
			}
			
			//finally create the GameCoreInstruction:
			return GameCore.getInstanceOfGameCore().new ClickEventGameCoreInstruction( boardIndices );
		}
		
		if ( nm.getMessage().startsWith("mouse:") )
		{
			String[] tmp = nm.getMessage().split(":");
			int               mouseID  = Integer.parseInt( tmp[1] );
			Mouse.Orientation mOrient  = Mouse.Orientation.values()[ Integer.parseInt(tmp[2]) ];
			Point             mIndices = new Point( Integer.parseInt(tmp[3]), Integer.parseInt(tmp[4]) );
			
			return GameCore.getInstanceOfGameCore().new MouseUpdateGameCoreInstruction( mouseID, mOrient, mIndices );
		}
		
		if ( nm.getMessage().startsWith("winner:") )
		{
			String[] tmp = nm.getMessage().split(":");
			int      winnerMouseID  = Integer.parseInt( tmp[1] );
			
			return GameCore.getInstanceOfGameCore().new MouseWonGameCoreInstruction( winnerMouseID );
		}
		
		if ( nm.getMessage().startsWith("serverLoss") )
		{
			return GameCore.getInstanceOfGameCore().new ServerLossGameCoreInstruction();
		}
		
		return GameCore.getInstanceOfGameCore().new EmptyGameCoreInstruction();
	}