public void exposeObject(String name, Object obj) throws IOException { // Create a local object LocalObject localObj = new LocalObject(); localObj.objectName = name; localObj.objectId = objectIdCounter++; localObj.theObject = obj; // localObj.methods = obj.getClass().getMethods(); ArrayList<Method> methodList = new ArrayList<Method>(); for (Method method : obj.getClass().getMethods()) { if (method.getDeclaringClass() == obj.getClass()) { methodList.add(method); } } localObj.methods = methodList.toArray(new Method[methodList.size()]); // Put it in the store localObjects.put(localObj.objectId, localObj); // Inform the others of its existence RemoteObjectDefMessage defMsg = new RemoteObjectDefMessage(); defMsg.objects = new ObjectDef[] {makeObjectDef(localObj)}; if (client != null) { client.send(defMsg); logger.log(Level.FINE, "Client: Sending {0}", defMsg); } else { server.broadcast(defMsg); logger.log(Level.FINE, "Server: Sending {0}", defMsg); } }
public void hitByExplosion( CollisionParticipant source, LocalObject obj, DecalManager decal, CollisionEvent ce) { if (shield.getVisibility()) { // If the shield is visible, we are invincible... return; } Event event = new Event(Event.EXPLOSION_HIT, -99, obj.getObjectID(), obj.getClientID()); source.getEventQueue().add(event); }
public void setToLocalObject(LocalObject lo) { super.setToLocalObject(lo); if (lo.isInvincible() && !shield.getVisibility()) { shield.setVisibility(true); } else { if (!lo.isInvincible()) { shield.setVisibility(false); } } }
/** * Gets a local object stored on the server identified by the clientID and the objectID. The * actual client don't know a thing about which local object ID their objects will get on the * server which is why they can't transmit them. All they know is, how THEY identify their * objects. This method maps between those two worlds. * * @param objID the objectID * @param clientID the clientID * @return LocalObject the corresponding local object */ public LocalObject getLocalObjectToIDs(int objID, int clientID) { for (Iterator<LocalObjectList> itty = client2LocalObj.values().iterator(); itty.hasNext(); ) { LocalObjectList entry = itty.next(); for (Iterator<LocalObject> itty2 = entry.iterator(); itty2.hasNext(); ) { LocalObject lo = itty2.next(); if (lo.getClientID() == clientID) { if (lo.getObjectID() == objID) { return lo; } } else { break; // Wrong client! } } } return null; }
public void init(int id) { // This instance of LocalObject is used in the view only. The crates // aren't real // LocalObject/ClientObject-entities as they are not transfered to the // server. // However, events and collision listeners need some information from // the LocalObject lob = new LocalObject(-99); lob.setObjectID(id); }
/** Test of getGetData method, of class LocalObjectDateTimeDelegate. */ @Test public void testGetData() { DeviceObjectInfo objectInfo = new TemperatureSensorInfo(); objectInfo.add(EPC.x97, true, false, false, 2); objectInfo.add(EPC.x98, true, false, false, 4); LocalObject object = new LocalObject(objectInfo); LocalObjectDateTimeDelegate delegate = new LocalObjectDateTimeDelegate(); LocalObjectDelegate.GetState dataDate1 = new LocalObjectDelegate.GetState(object.getInternalData(EPC.x98)); delegate.getData(dataDate1, object, EPC.x98); LocalObjectDelegate.GetState dataTime1 = new LocalObjectDelegate.GetState(object.getInternalData(EPC.x98)); delegate.getData(dataTime1, object, EPC.x97); LocalObjectDelegate.GetState dataDate2 = new LocalObjectDelegate.GetState(object.getInternalData(EPC.x98)); delegate.getData(dataDate2, object, EPC.x98); LocalObjectDelegate.GetState dataTime2 = new LocalObjectDelegate.GetState(object.getInternalData(EPC.x98)); delegate.getData(dataTime2, object, EPC.x97); Calendar now1 = Calendar.getInstance(); Calendar now2 = ((Calendar) now1.clone()); now2.add(Calendar.SECOND, -1); now1.set(Calendar.SECOND, 0); now1.set(Calendar.MILLISECOND, 0); now2.set(Calendar.SECOND, 0); now2.set(Calendar.MILLISECOND, 0); Calendar cal1 = dataToCal(dataDate1.getGetData(), dataTime1.getGetData()); Calendar cal2 = dataToCal(dataDate2.getGetData(), dataTime2.getGetData()); assertTrue(eq(now1, cal1) || eq(now1, cal2) || eq(now2, cal1) || eq(now2, cal2)); }
/** * Takes the input transmitted by a client and creates or updates the local instances that * represent the objects on the client. * * @param ec the container with the client's objects */ public void setOrUpdate(ExtendedDataContainer ec) { ClientInfo ci = ec.getClientInfo(); LocalObjectList lol = getLocalObjectList(ci); LocalObject lo = new LocalObject(ci.getID(), true); ec.fillLocalObject(lo); boolean found = false; for (Iterator<LocalObject> itty = lol.iterator(); itty.hasNext(); ) { LocalObject lot = itty.next(); if (lot.equals(lo)) { lot.copyFrom(lo); found = true; break; } } if (!found) { lol.add(lo); NetLogger.log( "Server: Added an object of client " + ci.getID() + "! Client's object count is now: " + lol.size()); } }
public void hitByExplosion( CollisionParticipant source, LocalObject obj, DecalManager decal, CollisionEvent ce) { if (!isInactive()) { Event event = new Event(Event.CRATE_HIT, -99, obj.getObjectID(), -99); int[] ids = ce.getPolygonIDs(); if (ids != null) { // The Crates on the bot client don't return those IDs...and // they don't have to. PolygonManager pm = getPolygonManager(); SimpleVector normal = pm.getTransformedNormal(ids[0]); event.setOrigin(normal); } source.getEventQueue().add(event); } }
/** * Removes an object from the server's list, i.e. it doesn't exist on the client any longer. * * @param lo the object to remove * @param ci the client info */ public void removeObject(LocalObject lo, ClientInfo ci) { LocalObjectList lol = getLocalObjectList(ci); boolean ok = lol.remove(lo); if (ok) { NetLogger.log( "Server: Removed an object (" + lo.getObjectID() + ") of client " + ci.getID() + "! Client's object count is now: " + lol.size()); } else { NetLogger.log("Server: Failed to remove object of client " + ci); } }