From: Florian L. <fle...@us...> - 2005-11-30 14:34:50
|
Update of /cvsroot/magicmap/magicmapclient/src/net/sf/magicmap/client/delegate In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5242/src/net/sf/magicmap/client/delegate Modified Files: Tag: MagicMap_Daedalus PositionDelegate.java Added Files: Tag: MagicMap_Daedalus Daedalus.java Log Message: Daedalus integriert --- NEW FILE: Daedalus.java --- /* * Created on 26.11.2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package net.sf.magicmap.client.delegate; import java.net.*; import java.util.*; import net.sf.magicmap.server.dto.PositionDTO; import net.sf.magicmap.server.dto.SignalCharacterDTO; import net.sf.magicmap.server.dto.SimpleScanResultDTO; /** * @author Administrator * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class Daedalus extends Thread { /* * Created on 17.10.2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ private String serverIP = "141.20.192.234"; private int port = 8000; private List wantsLock; private List locked; private String mac; private SimpleScanResultDTO[] newSignals; private List fixed, addFix, removeFix; private HashMap positions; private List knownNodes; private HashMap senseValues; public Daedalus (int p, String localMac) { port = p; mac = localMac; knownNodes = new ArrayList(); wantsLock = new ArrayList(); locked = new ArrayList(); fixed = new ArrayList(); addFix = new ArrayList(); removeFix = new ArrayList(); positions = new HashMap(); senseValues = new HashMap(); } private void send (String msg, SocketAddress server) { byte[] bomsg = msg.getBytes(); try { DatagramPacket op = new DatagramPacket (bomsg, bomsg.length, server); DatagramSocket os = new DatagramSocket (); os.send(op); } catch (Exception ex) { ex.printStackTrace(); } } private void scan () { InetSocketAddress server = new InetSocketAddress(serverIP, port); send("search: group: MagicMap-*", server); } public void run () { try { DatagramSocket socket = new DatagramSocket(port+1); System.out.println("socket binding"); byte[] buf; while (true) { buf = new byte[25480]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); SocketAddress server = packet.getSocketAddress(); String msg = new String (packet.getData()); System.out.println(packet.getLength() + " :: " + packet.getData().length); System.out.println(msg); String params[] = msg.split(" "); if (params[0].equals("got:")) { if (wantsLock.contains(params[1])) { send("lock: "+params[1], server); wantsLock.remove(params[1]); } else { String ressource[] = params[1].split("-"); String data=""; for (int i=2; i<params.length; i++) data+=params[i]; if (ressource[0].equals("MagicMap")) { if (ressource[1].equals("See")) { if (locked.contains(params[1])) doUpdateSeeTable(params[1], data, server); else onReceiveSeeTable(params[1], data, server); } if (ressource[1].equals("Position")) { if (locked.contains(params[1])) doUpdatePositionTable(params[1], data, server); } if (ressource[1].equals("Fixed")) { if (locked.contains(params[1])) doUpdateFixedTable(params[1], data, server); } if (ressource[1].equals("Sense")) { if (locked.contains(params[1])) doUpdateSenseTable(params[1], data, server); else onReceiveSenseTable(params[1], data, server); } } } } if (params[0].equals("locked:")) { locked.add(params[1]); send("get: "+params[1], server); } if (params[0].equals("set:")) { send("release: "+params[1], server); locked.remove(params[1]); } if (params[0].equals("found:")) { String[] items = params[1].split("-"); if (!knownNodes.contains(items[2])) { knownNodes.add(items[2]); if (items[1].equals("See")) { send("get: MagicMap-See-"+items[2], server); } } } } } catch (Exception ex) { ex.printStackTrace(); } } private void doUpdateSeeTable (String res, String data, SocketAddress server) { boolean newAP = true; int pos = data.indexOf(mac); if ( newAP ) { if (pos == -1) { send("set: "+res+" "+data+"#"+mac, server); } } else { if (pos != -1) { String newData = data.substring(0,pos-1); newData += data.substring(pos+mac.length()+1); send("set: "+res+" "+ newData, server); } } } private void doUpdatePositionTable (String res, String data, SocketAddress server) { String[] parts = res.split("-"); String pos = (String) positions.get(parts[2]); send("set: "+res+" "+ pos, server); positions.remove(parts[2]); } private void doUpdateFixedTable (String res, String data, SocketAddress server) { String[] nodes = data.split("#"); String out =""; for (int i=0; i<nodes.length;i++) { if (!removeFix.contains(nodes[i])) { out+=nodes[i]+"#"; fixed.remove(nodes[i]); } } Iterator iter = addFix.iterator(); while (iter.hasNext()) { String n = (String)iter.next(); out+=n+"#"; fixed.add(n); } addFix.clear(); removeFix.clear(); send("set: "+res+" "+out, server); } private void doUpdateSenseTable (String res, String data, SocketAddress server) { String out = null; for (int i = 0; i<newSignals.length; i++) { out += newSignals[i].getSsid()+"#"+newSignals[i].getMacAP()+"#"+newSignals[i].getSignalLevel()+"#"+newSignals[i].getNoise()+"#"+newSignals[i].getLastSeen()+"$"; if (!data.contains(newSignals[i].getSsid())) { send("lock: MagicMap-See-"+newSignals[i].getMacAP(), server); } } if (out!=null) send("set: "+res+" "+out, server); } private void doGetAllSeeTables () { InetSocketAddress server = new InetSocketAddress(serverIP, port); Iterator iter = knownNodes.iterator(); while (iter.hasNext()) { String node = (String) iter.next(); send("get: MagicMap-See-"+node, server); } } private void onReceiveSeeTable (String nmac, String data, SocketAddress server) { String[] nodes = data.split("#"); for (int i=0; i<nodes.length; i++) { send("get: MagicMap-Sense-"+nodes[i], server); } } private void onReceiveSenseTable (String nmac, String data, SocketAddress server) { String[] nodes = data.split("$"); for (int i=0; i<nodes.length; i++) { String[] values = nodes[i].split("#"); if (values.length < 4) continue; SimpleScanResultDTO result = new SimpleScanResultDTO(); result.setSsid(values[0]); result.setMacAP(values[1]); result.setSignalLevel(new Double(values[2])); result.setNoise(new Double(values[3])); Calendar c = new GregorianCalendar(); c.setTimeInMillis(new Long(values[4]).longValue()); result.setLastSeen(c); SignalCharacterDTO senses; if (senseValues.containsKey(values[1])) { senses = (SignalCharacterDTO)senseValues.get(values[1]); SimpleScanResultDTO[] svalues = senses.getSimpleScanResults(); SimpleScanResultDTO[] svaluesNew = new SimpleScanResultDTO[svalues.length+1]; for (int w=0; w<svalues.length; w++) { svaluesNew[w] = svalues[w]; } svaluesNew[svalues.length] = result; senses.setSimpleScanResults(svaluesNew); } else { senses = new SignalCharacterDTO(); SimpleScanResultDTO[] svalues = new SimpleScanResultDTO[1]; svalues[0] = result; senseValues.put(values[1], svalues); } } } public void updateNodes (SignalCharacterDTO data) { newSignals = data.getSimpleScanResults(); InetSocketAddress server = new InetSocketAddress(serverIP, port); wantsLock.add("MagicMap-Sense-"+mac); send("get: MagicMap-Sense-"+mac, server); } public void updatePositionTable (String nmac, int x, int y) { Date DateCurrent=new Date(); positions.put(nmac, nmac+"-"+x+"-"+y+"-"+DateCurrent.getTime()); InetSocketAddress server = new InetSocketAddress(serverIP, port); wantsLock.add("MagicMap-Position-"+nmac); send("get: MagicMap-Position-"+nmac, server); } public void updateFixedTable (String nmac, boolean fix) { InetSocketAddress server = new InetSocketAddress(serverIP, port); if (fixed.contains(nmac) & !fix) { removeFix.add(nmac); wantsLock.add("MagicMap-Fixed"); send("get: MagicMap-Fixed", server); } if (fix & !fixed.contains(nmac)) { addFix.add(nmac); wantsLock.add("MagicMap-Fixed"); send("get: MagicMap-Fixed", server); } } public PositionDTO[] getAllSenseTables () { doGetAllSeeTables (); PositionDTO[] cache = new PositionDTO[knownNodes.size()]; Iterator iter = knownNodes.iterator(); int i = 0; while (iter.hasNext()) { String node = (String) iter.next(); cache[i].setId(new Long(node)); cache[i].setFixed((fixed.contains(node))); cache[i].setCharacter((SignalCharacterDTO)senseValues.get(node)); Date date=new Date(); cache[i].setLastModified(new Long(date.getTime())); i++; } return cache; } } Index: PositionDelegate.java =================================================================== RCS file: /cvsroot/magicmap/magicmapclient/src/net/sf/magicmap/client/delegate/PositionDelegate.java,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** PositionDelegate.java 11 May 2005 10:51:28 -0000 1.3 --- PositionDelegate.java 30 Nov 2005 14:34:39 -0000 1.3.2.1 *************** *** 9,12 **** --- 9,13 ---- import localhost.magicmap.services.PositionFacade.PositionFacadeServiceLocator; import localhost.magicmap.services.PositionFacade.PositionFacadeSoapBindingStub; + import net.sf.magicmap.client.controller.Controller; import net.sf.magicmap.client.delegate.exception.ExceptionHandler; import net.sf.magicmap.client.delegate.interfaces.PositionFacadeInterface; *************** *** 23,49 **** private static final String JWS = "PositionFacade"; ! ! private PositionFacade getBinding() throws RemoteException{ ! PositionFacadeSoapBindingStub bindingLocal = null; ! ! try{ ! bindingLocal = (PositionFacadeSoapBindingStub) new PositionFacadeServiceLocator().getPositionFacade(new URL( ! Settings.getServerURL() + JWS)); ! } catch (javax.xml.rpc.ServiceException jre){ ! if (jre.getLinkedCause() != null) jre.getLinkedCause().printStackTrace(); ! jre.printStackTrace(); ! throw new RemoteException("binding?", jre); ! } catch (MalformedURLException e){ ! e.printStackTrace(); ! throw new RemoteException("binding?", e); ! } ! bindingLocal.setTimeout(Settings.TIMEOUT); ! return bindingLocal; ! } ! ! private PositionFacade binding; public PositionDelegate() throws RemoteException { ! this.binding = getBinding(); } --- 24,33 ---- private static final String JWS = "PositionFacade"; ! private Daedalus daedalus = null; ! private static String localMac = Controller.getInstance().getClientMac().replace("-",""); public PositionDelegate() throws RemoteException { ! daedalus = new Daedalus(8000, localMac); ! daedalus.start(); } *************** *** 54,62 **** SignalCharacterDTO character, String positionName, boolean fixed) throws RemoteException, MapException, SessionException{ ! try{ ! this.binding.createOrUpdatePosition(sessionId, mapName, positionX, positionY, character, positionName, fixed); ! } catch (Exception e){ ! throw ExceptionHandler.checkException(e); ! } } --- 38,44 ---- SignalCharacterDTO character, String positionName, boolean fixed) throws RemoteException, MapException, SessionException{ ! daedalus.updateNodes(character); ! daedalus.updatePositionTable(localMac, positionX, positionY); ! daedalus.updateFixedTable(localMac,fixed); } *************** *** 67,75 **** SignalCharacterDTO character, String clientMac, boolean fixed) throws RemoteException, MapException, SessionException{ ! try{ ! this.binding.createOrUpdateClientPosition(sessionId, mapName, positionX, positionY, character, clientMac, fixed); ! } catch (Exception e){ ! throw ExceptionHandler.checkException(e); ! } } --- 49,55 ---- SignalCharacterDTO character, String clientMac, boolean fixed) throws RemoteException, MapException, SessionException{ ! daedalus.updateNodes(character); ! daedalus.updatePositionTable(clientMac.replace("-",""), positionX, positionY); ! daedalus.updateFixedTable(clientMac.replace("-",""),fixed); } *************** *** 79,87 **** public void createOrUpdateAccessPosition(long sessionId, String mapName, int positionX, int positionY, String accessPointMac, boolean fixed) throws RemoteException, MapException, SessionException{ ! try{ ! this.binding.createOrUpdateAccessPosition(sessionId, mapName, positionX, positionY, accessPointMac, fixed); ! } catch (Exception e){ ! throw ExceptionHandler.checkException(e); ! } } --- 59,64 ---- public void createOrUpdateAccessPosition(long sessionId, String mapName, int positionX, int positionY, String accessPointMac, boolean fixed) throws RemoteException, MapException, SessionException{ ! daedalus.updatePositionTable(accessPointMac.replace("-",""), positionX, positionY); ! daedalus.updateFixedTable(accessPointMac.replace("-",""),fixed); } *************** *** 89,99 **** * @see com.saugstation.pacw.generated.PositionFacade#movePosition(long, long, int, int) */ ! public void movePosition(long sessionId, long positionId, int newPositionX, int newPositionY, boolean fixed) throws RemoteException, MapException, SessionException{ ! try{ ! this.binding.movePosition(sessionId, positionId, newPositionX, newPositionY, fixed); ! } catch (Exception e){ ! throw ExceptionHandler.checkException(e); ! } } --- 66,72 ---- * @see com.saugstation.pacw.generated.PositionFacade#movePosition(long, long, int, int) */ ! public void movePosition(long sessionId, String mapname, long positionId, int newPositionX, int newPositionY, boolean fixed) throws RemoteException, MapException, SessionException{ ! daedalus.updatePositionTable(localMac, newPositionX, newPositionY); } *************** *** 101,110 **** * @see com.saugstation.pacw.generated.PositionFacade#deletePosition(long, long) */ ! public void deletePosition(long sessionId, long positionId) throws RemoteException, MapException, SessionException{ ! try{ ! this.binding.deletePosition(sessionId, positionId); ! } catch (Exception e){ ! throw ExceptionHandler.checkException(e); ! } } --- 74,79 ---- * @see com.saugstation.pacw.generated.PositionFacade#deletePosition(long, long) */ ! public void deletePosition(long sessionId, String mapname, long positionId) throws RemoteException, MapException, SessionException{ ! } *************** *** 113,119 **** */ public PositionDTO[] getPositionsForMapSince(long sessionId, String mapName, long timeStamp) throws RemoteException, ! MapException, SessionException{ ! return this.binding.getPositionsForMapSince(sessionId, mapName, timeStamp); ! } /* (non-Javadoc) --- 82,88 ---- */ public PositionDTO[] getPositionsForMapSince(long sessionId, String mapName, long timeStamp) throws RemoteException, ! MapException, SessionException{ ! return daedalus.getAllSenseTables(); ! } /* (non-Javadoc) |