Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] Problem to connect gtalk account with ChatRobotApplication

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



Back to the top