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);
    }
  }
Example #2
0
 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);
 }
Example #3
0
 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;
 }
Example #5
0
 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());
   }
 }
Example #8
0
 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);
   }
 }