⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller.java

📁 P2P模拟器P2Psim的程序源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

		LinkedList list2 = p2.getListInformation("Gradient");

		//System.out.println("list2");
		if (list2 != null)
		{
			while(list2.size() > skip)
			{
				//System.out.println(list2.size());
				Gradient gradient = (Gradient)list2.get(skip);
				if (dgc2 == gradient.getBackPointer() || GraphEventManager.getReference().getConnectingEdge(dgc2, gradient.getBackPointer()) != null)
				{
					skip++;
				}
				else if (dgc2 != gradient.getBackPointer() && GraphEventManager.getReference().getConnectingEdge(dgc2, gradient.getBackPointer()) == null )
				{
					removeGradientField(gradient.getSource(), dgc2, false);
				}
			}
		}
		/*
		Iterator iterator1 = p1.getInformation("Gradient");
		if (iterator1 != null)
		{
			while(iterator1.hasNext())
			{
				Gradient gradient = (Gradient)iterator1.next();
				if (dgc1 != gradient.getBackPointer() && GraphEventManager.getReference().getConnectingEdge(dgc1, gradient.getBackPointer()) == null )
				{
					// Het gradient-veld is ongeldig, want de knoop waarlangs de sterkte werd doorgegeven, is niet
					// meer bereikbaar.
					gradient.setDistance(0);
					removeGradientField(gradient.getSource(), dgc1);
					
				}
			}
			li = GraphEventManager.getReference().getProperties(dgc1).getListInformation("Gradient");
			for (int i=li.size()-1; i>-1; i--)
			{
				if (((Gradient)li.get(i)).getDistance() == 0)
				{
					GraphEventManager.getReference().getProperties(dgc1).removeInformation("Gradient", li.get(i));	
				}
			}		
		}
		
		Iterator iterator2 = p2.getInformation("Gradient");
		if (iterator2 != null)
		{
			while(iterator2.hasNext())
			{
				Gradient gradient = (Gradient)iterator2.next();
				if (dgc2 != gradient.getBackPointer() && GraphEventManager.getReference().getConnectingEdge(dgc2, gradient.getBackPointer()) == null )
				{
					// Het gradient-veld is ongeldig, want de knoop waarlangs de sterkte werd doorgegeven, is niet
					// meer bereikbaar.
					gradient.setDistance(0);
					removeGradientField(gradient.getSource(), dgc2);
				}
			}
			li = GraphEventManager.getReference().getProperties(dgc2).getListInformation("Gradient");
			for (int i=li.size()-1; i>-1; i--)
			{
				if (((Gradient)li.get(i)).getDistance() == 0)
				{
					GraphEventManager.getReference().getProperties(dgc2).removeInformation("Gradient", li.get(i));	
				}
			}	
		}
		*/
		
		LinkedList li = null;
		
		Iterator iterator1 = p1.getInformation("Pheromones");
		if (iterator1 != null)
		{
			while(iterator1.hasNext())
			{
				Pheromone pheromone = (Pheromone)iterator1.next();
				if (dgc1 != pheromone.getDirection() && GraphEventManager.getReference().getConnectingEdge(dgc1, pheromone.getDirection()) == null )
				{
					// Het gradient-veld is ongeldig, want de knoop waarlangs de sterkte werd doorgegeven, is niet
					// meer bereikbaar.
					pheromone.setStrength(0);
				}
			}
			li = GraphEventManager.getReference().getProperties(dgc1).getListInformation("Pheromones");
			for (int i=li.size()-1; i>-1; i--)
			{
				if (((Pheromone)li.get(i)).getStrength() == 0)
				{
					GraphEventManager.getReference().getProperties(dgc1).removeInformation("Pheromones", li.get(i));	
				}
			}		
		}

		Iterator iterator2 = p2.getInformation("Pheromones");
		if (iterator2 != null)
		{
			while(iterator2.hasNext())
			{
				Pheromone pheromone = (Pheromone)iterator2.next();
				if (dgc2 != pheromone.getDirection() && GraphEventManager.getReference().getConnectingEdge(dgc2, pheromone.getDirection()) == null )
				{
					// Het gradient-veld is ongeldig, want de knoop waarlangs de sterkte werd doorgegeven, is niet
					// meer bereikbaar.
					pheromone.setStrength(0);
				}
			}
			li = GraphEventManager.getReference().getProperties(dgc2).getListInformation("Pheromones");
			for (int i=li.size()-1; i>-1; i--)
			{
				if (((Pheromone)li.get(i)).getStrength() == 0)
				{
					GraphEventManager.getReference().getProperties(dgc2).removeInformation("Pheromones", li.get(i));	
				}
			}		
		}
			
	}
	
	public void removeGradientField(DefaultGraphCell source, DefaultGraphCell previousNode, boolean alsoOrigin)
	{	
		boolean removeThis = false;
		Gradient gradient = null;
		
		Iterator gradientIterator = GraphEventManager.getReference().getProperties(previousNode).getInformation("Gradient");
		while(gradientIterator != null && !removeThis && gradientIterator.hasNext())
		{
			gradient = (Gradient)gradientIterator.next();
			
			if (alsoOrigin)
			{
				if (gradient.getSource() == source)
				{
					removeThis = true;	
				}
			}
			else
			{
				if (gradient.getSource() == source && source != previousNode)
				{
					removeThis = true;	
				}
			}
		}
		if (removeThis)
		{
			GraphEventManager.getReference().getProperties(previousNode).removeInformation("Gradient", gradient);
		}	
		
		//System.out.println("removing gradient-fields");
		Iterator iterator = GraphEventManager.getReference().getConnectedNodes(previousNode).iterator();
		
		while(iterator.hasNext())
		{
			removeThis = false;
			
			DefaultGraphCell dgc = (DefaultGraphCell)iterator.next();
			
			gradientIterator = GraphEventManager.getReference().getProperties(dgc).getInformation("Gradient");
			while(gradientIterator != null && !removeThis && gradientIterator.hasNext())
			{
				gradient = (Gradient)gradientIterator.next();
				if (gradient.getSource() == source && gradient.getBackPointer() == previousNode)
				{
					removeThis = true;	
				}
			}
			if (removeThis)
			{
				GraphEventManager.getReference().getProperties(dgc).removeInformation("Gradient", gradient);
				removeGradientField(source, dgc, alsoOrigin);
			}
		}
		
		removeThis = false;
	
	}
	
	public void removeAllGradientFields()
	{
		for (int i = 0; i < model.getRootCount(); i++)
		{
			if ((DefaultGraphCell)model.getRootAt(i) == null)
			{
				System.out.println("Null op positie: " + i);
			}
			Properties properties = GraphEventManager.getReference().getProperties((DefaultGraphCell)model.getRootAt(i));
					
			if (!(model.getRootAt(i) instanceof DefaultEdge))
			{
				removeGradientField((DefaultGraphCell)model.getRootAt(i), (DefaultGraphCell)model.getRootAt(i), true);
			}
		}
	}

	public void constructAllGradientFields(int strength)
	{
		for (int i = 0; i < model.getRootCount(); i++)
		{
			if ((DefaultGraphCell)model.getRootAt(i) == null)
			{
				System.out.println("Null op positie: " + i);
			}
			else if (!(model.getRootAt(i) instanceof DefaultEdge))
			{
				constructGradientField((DefaultGraphCell)model.getRootAt(i),(DefaultGraphCell)model.getRootAt(i),strength);
			}
		}		
	}

	public void constructGradientField(DefaultGraphCell source, DefaultGraphCell currentPosition, int strength)
	{
		if (strength > 0)
		{
			Properties properties;
			EdgeProperties edgeProperties;
			Edge edge;
			DefaultGraphCell nextPosition;
			DefaultEdge nextEdge;

			if (source == currentPosition)
			{
			//	properties = (Properties)GraphConstants.getValue(currentPosition.getAttributes());
			//	properties.addInformation("Gradient", new Gradient(strength, source, currentPosition) );
				boolean add = true;
				if (GraphEventManager.getReference().getProperties(currentPosition).getInformation("Gradient") != null)
				{
					ListIterator li = GraphEventManager.getReference().getProperties(currentPosition).getInformation("Gradient");
					while (li.hasNext())
					{
						Gradient gradient = (Gradient)li.next();
						if (gradient.getSource() == currentPosition)
						{
							add = false;
							gradient.setDistance(Math.max(gradient.getDistance(), strength));
						}	
					}
				}
				if (add)
				{
					GraphEventManager.getReference().getProperties(currentPosition).addInformation("Gradient", new Gradient(strength, source, currentPosition) );
				}
			}
					
			if (source == null)
			{
				source = (DefaultGraphCell)model.getRootAt(0);
				currentPosition = source;
			}
			
			int newStrength = 0;
			
			boolean addGradient;
			Gradient tempGradient;
			Iterator gradientIterator;
			
			
			//GraphCell cells[] = new GraphCell[1];
			//cells[0] = currentPosition;
		
			if (GraphEventManager.getReference().getConnectedNodes(currentPosition) != null)
			{
				Iterator iterator2 = GraphEventManager.getReference().getConnectedNodes(currentPosition).iterator();
				Iterator iteratorEdges = GraphEventManager.getReference().getConnectingEdges(currentPosition);
				
				while (iterator2.hasNext())	
				{
					nextPosition = (DefaultGraphCell)iterator2.next();
					nextEdge = (DefaultEdge)iteratorEdges.next();
					
					if(! nextPosition.equals(source))
					{
						properties = (Properties)GraphConstants.getValue(nextPosition.getAttributes());
						edgeProperties = (EdgeProperties)GraphConstants.getValue(nextEdge.getAttributes());
						
						newStrength = strength - (11 - edgeProperties.getCapacity());
						
						if (newStrength > 0)
						{
							gradientIterator = properties.getInformation("Gradient");
							addGradient = true;
						
							if (gradientIterator != null)
							{
								while (gradientIterator.hasNext())
								{
									tempGradient = (Gradient)gradientIterator.next();
									if (tempGradient.getSource().equals(source))
									{
										if (tempGradient.getDistance() <= newStrength)
										{
											// Update bestaande gradient
											addGradient=false;
											tempGradient.setDistance(newStrength);
											tempGradient.setBackPointer(currentPosition);
											constructGradientField(source, nextPosition, newStrength);	
										}
										else
										{
											// Er is al een betere gradient
											addGradient=false;
										}
									}
								}
							}
					
							if (addGradient)
							{
								// Er is nog geen gradient vanuit source
								//System.out.println("newGradient");
								properties.addInformation("Gradient", new Gradient(newStrength, source, currentPosition) );
								constructGradientField(source, nextPosition, newStrength);
							}		
						}
					} 
				}
			}
			else
			{
		
			}
		}
		else
		{
			System.out.println("NOOOOIT !");
		}
	}
	
	
	public void addResource(DefaultGraphCell dgc, Resource resource)
	{
		//((Properties)(GraphConstants.getValue(dgc.getAttributes()))).addInformation("Resources", resource);
		GraphEventManager.getReference().getProperties(dgc).addInformation("Resources", resource);
	}

	public void searchForResource(DefaultGraphCell origin, String searchFor)
	{		
		ResourceQuery query = new ResourceQuery(searchFor, internalTime);
		GraphEventManager.getReference().getProperties(origin).addInformation("Query", query);
		
		query.start(origin);
	}	
	
	
	public void addRandomResources(int min, int max)
	{
		for (int i = 0; i < model.getRootCount(); i++)
		{
			if ((DefaultGraphCell)model.getRootAt(i) instanceof DefaultEdge)
			{
				// edge kan geen resources bevatten
			}
			else
			{
				int aantal = min + (int)(Math.random()*(max-min+0.9));
				Iterator newResources = GraphEventManager.getReference().eventGetRandomResources(aantal);
				
				if (newResources != null)
				{
					while(newResources.hasNext())
					{
						this.addResource((DefaultGraphCell)(model.getRootAt(i)),(Resource)newResources.next());
					}
				}
			}
		
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -