| Hi Scott... 
 I understood now how handlePresence works.. :)
 
 and what happens for not working before was that my receiver user
    was on-line but his status was 'Invisible' at gtalk page, so because
    that handlePresence was not called.
 
 thanks a lot
 
 Cristiano
 
 On 27/07/11 17:59, Scott Lewis wrote:
 
      
      Hi Christiano,
 On 7/27/2011 11:08 AM, Cristiano Gavião wrote:
 
        
        Hi Scott,
 yep, you are right... but I have change the ID because I'm
        trying to following some tips from this thread: http://community.igniterealtime.org/thread/35976
 
 Now I'm connecting...  :D I think that my mistake was to setup
        the ids on the product file instead of the launcher... because
        the launcher is not updated once created... :(
 
 but the ChatRobotApplication still not working properly...
 
 The method handlePresence is trying to do something that is not
        working. It is putting the fromChatId inside the rosterUsers:
 
 public void handlePresence(ID fromID,
          IPresence presence) {System.out.println("handlePresence fromID="+fromID+"
          presence="+presence);
 IChatID fromChatID = (IChatID)
          fromID.getAdapter(IChatID.class);
 
 if (fromChatID != null) {
 rosterUsers.put(fromChatID.getUsername() + "@" +
          fromChatID.getHostname(), fromID);
 }
 and later rosterUsers is being compared with the TargetId that
        I've setup... If my target is different from my sender, it will
        never work... right ?
 
 No...the handlePresence method is/should be called when your
      *receiver* is added to your sender's roster after connection (i.e.
      and is online/present).  For example, if your sender/robot is
      identified as
 
 cvgaviao@xxxxxxxxx then the
      sender (c4bizconsulting@xxxxxxxxx)
      should have this method called
 
 public void handlePresence(ID fromID, Presence presence) {
 ID == cvgaviao@xxxxxxxxx
 ...(put cvgaviao@xxxxxxxxx into
      rosterUsers
 }
 
 Then in the code that actually does the send...i.e.
 
 // Get desired user ID from rosterUsers map.  This is just
      looking for a user that's active and on our contacts list
 ID targetID = (ID) rosterUsers.get(originalArgs[2]);
 
 This sets the targetID to the value that was put into rosterUsers
      by the handlePresence method (should be ID=cvgaviao@xxxxxxxxx). 
      This simply builds in the assumption that the receiver is *on the
      sender's contact list, and is active/present*.  So you might need
      to add cvgaviao@xxxxxxxxx to c4bizconsulting@xxxxxxxxx's
      roster (if it's not already).
 
 If you want to remove this restriction, and have the sender just
      send to any receiver...i.e. one that may or may not be on your
      contact list (if that's allowed by the service...I'm not sure
      whether gtalk allows delivery of messages to arbitrary receivers
      or not these days), then you could change the code to be like
      this:
 
 ID targetID =
IDFactory.getDefauilt().createID(client.getConnectNamespace(),originalArgs[2]);
 // Construct message
 String msgToSend = (message==null)?"Hi, I'm an ECF chat
      robot.":message;
 System.out.println("ECF chat robot example sending to
      targetAccount=" + originalArgs[2] + " message="+msgToSend);
 
 // Send message to targetID
 client.sendChat(targetID, msgToSend);
 
 Does this make sense?  The reason this restriction was put in
      place was that sometimes the services restrict message delivery
      only to receivers that are on the sender's contact list (to reduce
      IM spam, I'm sure).
 
 Scott
 
 
 
 
 |