package fr.insa.lyon.ot.sims.client.communication.p2p;
import java.util.HashMap;
import java.util.Vector;
import fr.insa.lyon.ot.sims.client.communication.p2p.Node.STATE_NODE;
import junit.framework.Assert;
public class CommunicationP2P implements CommunicationInterface {
protected HashMap <String,Node> nodes;
protected Vector<ResponseListenerMessage> listeners;
protected ComSend comSend;
protected ComRecv comRecv;
protected DiscoveryInterface discovery;
protected P2P p2p;
public String getOurDeviceAdress()
{
return discovery.getOurDeviceAdress();
}
public CommunicationP2P(P2P p2p)
{
this.p2p = p2p;
nodes = new HashMap <String,Node>();
listeners = new Vector<ResponseListenerMessage>();
comSend = new ComSend();
comRecv = new ComRecv(this);
System.out.println("Test2");
discovery = new DiscoveryWiFi(this);
System.out.println("Test FINAL");
comRecv.start();
}
public void finalize()
{
System.out.println("CommunicationP2P: finalized");
comRecv.MyDestroy();
}
protected void dispatchMessageToListeners(Message message)
{
for(int i=0;i<listeners.size();i++)
{
listeners.get(i).sendResponse(message);
}
}
public Vector<Node> getNodes() {
Vector<Node> returnNodes = new Vector<Node>();
for (Node node: nodes.values()) {
if(node.getState()==STATE_NODE.INIT)
{
returnNodes.add(node);
}
}
return returnNodes;
}
public Boolean sendMessage(Message message, Node node) {
return true;
}
public void addResponseListenerMessage(ResponseListenerMessage listener) {
Assert.assertEquals("BT: Listener already added",listeners.contains(listener),false);
listeners.add(listener);
}
public void removeResponseListenerMessage(ResponseListenerMessage listener) {
Assert.assertEquals("BT: Listener already removed",listeners.contains(listener),true);
listeners.remove(listener);
}
public void callbackAddNodeDiscovery(Node node) {
System.out.println("CommunicationP2P: discovery new node. ");
if(!nodes.containsKey(node.adress))
{
System.out.println("CommunicationP2P: discovery new node. START send init trame to "+node.adress);
Node ourNode=p2p.getOurNode();
nodes.put(node.adress, node);
TrameP2P trame = new TrameP2P(
TypeTrameP2P.TypeTrameP2PInit,
ourNode.getAdress(),
node.getAdress(),
null);
// TODO: get Node from P2P;
comSend.sendTrameP2P(trame);
}
}
public void callbackRemoveNodeDiscovery(Node node) {
if(nodes.containsKey(node.adress))
{
nodes.remove(node.adress);
}
}
synchronized public void callbackTrameP2PRecv(TrameP2P trameP2P) {
if(trameP2P.getTypeTrameP2P()==TypeTrameP2P.TypeTrameP2PInit)
{
if(!nodes.containsKey(trameP2P.getAdressSrc()))
{
//TODO
Node newNodeInit = new Node(true);
}
}
}
}
|