Issue Details (XML | Word | Printable)

Key: LIBOMV-454
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Blocker Blocker
Assignee: Robin Cornelius
Reporter: maeva anatine
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
libopenmetaverse

Unable to organize Conferences

Created: 24/Feb/09 11:21 AM   Updated: 08/Mar/09 12:18 AM
Component/s: Agents
Affects Version/s: None
Fix Version/s: 0.6.0

Severity: Medium
Environment: All
Steps to Reproduce: Try to organize a conference


 Description  « Hide
I'm unable to organize conferences. It seems following API:

InstantMessage(string fromName, UUID target, string message, UUID imSessionID,
UUID[] conferenceIDs

should do the job, but it does'nt (no conference, but a simple Im session)

I also had a look at this page: http://www.libsecondlife.org/wiki/IM, and tried to reproduce the described behaviour (it's worth noticing the Dialog is different in above API...). But still with no success....



 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Robin Cornelius added a comment - 28/Feb/09 10:24 AM
Looks like the conference start has all gone over to caps now.:-

<llsd><map><key>method</key><string>start conference</string><key>params</key><array><uuid>SOME USER UUID HERE</uuid><uuid>SOME USER UUID HERE</uuid></array><key>session-id</key><uuid>9c66ef0a-67c9-7c25-4271-5ce9081699f4</uuid></map></llsd>

where session_id is a UUID.Random() from the sender, should get back something like ;-

<llsd><map><key>events</key><array><map><key>message</key><string>ChatterBoxSessionStartReply</string><key>body</key><map><key>session_id</key><uuid>ce24def6-5d18-4779-9c20-9f36ab2686cc</uuid><key>temp_session_id</key><uuid>9c66ef0a-67c9-7c25-4271-5ce9081699f4</uuid><key>success</key><boolean>1</boolean><key>session_info</key><map><key>moderated_mode</key><map><key>voice</key><boolean>0</boolean></map><key>session_name</key><string>Michelle2 Zenovka Conference</string><key>type</key><integer>1</integer><key>voice_enabled</key><boolean>1</boolean></map></map></map></array><key>id</key><integer>10</integer></map></llsd>

ChatterBoxSessionStartReply is the standard OnGroupChatJoin() call back so looks like we just need the first CAPS request to start the session. I'll go digging.

BTW once a session is started and you want to send a message to the session you need to send a standard IM to EACH member of the session (which you can get from the List client.Self.GroupChatSessions.Dictionary[session_id], also note as well as sending to each member as per a normal IM you should set the session_id and the BinaryBucket, the bucket is the name of the chat as a binary array, you can when starting a session specify what ever you like, but if you are invited to a session you should use the name passed to you on recieved IM packets.

I need this to work myself so will include it soon


Robin Cornelius added a comment - 02/Mar/09 05:17 AM
There is code in the latest svn that should allow you to start conference sessions ( i have certainly been able to use it under my test conditions). Please note the InstantMessage(string fromName, UUID target, string message, UUID imSessionID UUID[] conferenceIDs is probably not a lot of use anymore so you will need to send the IM to each AV in the current chat session as i previously described. Based on what i logged with the current LL 1.22 series viewer. The only only tip i'll give is don't forget to send the binary bucket as well as the session_id it seems necessary for the LL viewer to correctly filter the conference IM to the correct window.

maeva anatine added a comment - 02/Mar/09 05:42 AM
I made some tests in parallel from my side as well, and was able to get a running conference, but in a way that seems odd. I wanted to know your feedback on this "happens-to-work" aspect. Here's what I did:

1) Got the ChatSessionRequest capability
2) Sent the "start conference" with some given UUIDs for avatars, and a new random Session ID.
3) Got the event GroupChatJoinedCallback with tmpSessionID being my session ID in step 2. Stored the groupChatSessionID
4) Used the groupChatSessionID with an InstantMessageGroup

With this InstantMessageGroup, I'm able to send message only once and not not anyone in the conf.

I don't know why, but it works ! I just want to understand if it works for "normal" reasons, and not in conditions that are "border line" and could not work properly in the future.


Robin Cornelius added a comment - 02/Mar/09 06:34 AM
InstantMessageGroup will not work, use the standard instant message function such as ;-

foreach(OpenMetaverse.ChatSessionMember member in client.Self.GroupChatSessions.Dictionary[this.im_target])
{
if(member.AvatarKey!=MainClass.client.Self.AgentID)
MainClass.client.Self.InstantMessage(client.Self.Name,member.AvatarKey,entry_chat.Text,this.im_target,InstantMessageDialog.MessageFromAgent,InstantMessageOnline.Online,new Vector3(),UUID.Zero,bucket);
}

Where im_target is the actual session_id returned from GroupChatJoinedCallback (not the temp one) and bucket is a byte[] form of the session name that was given to you in GroupChatJoinedCallback as well.

The conference chat system does not appear to use the servers group session functionality in anyway.

I've had success with the above


maeva anatine added a comment - 03/Mar/09 08:59 AM
Hi Robin,

well, actually I also had success with the method I described above !

I don't know why, but it appears the InstantMessageGroup is making the job properly !!! This is interesting to understand why, and to see if this is a "viable" behaviour, as it is significantly more interesing to just make this call and rely on server to dispatch, rather than going through the whole loop of all conf attendees...

In addition, using the GridProxy and the SL viewer RC, I saw the viewer doesn't behave as you describe. In fact I get only one sent IM per message to the conf...

Of course I can give you my code if you want to reproduce, no problem.

Mae


Robin Cornelius added a comment - 07/Mar/09 12:05 PM
Hi, yes you are correct InstantMessageGroup() does indeed work. My confusion was it did not work correctly when you are invited to a conference. But this is also fixed by sending a ChatterBoxAcceptInvite() then it works.

I've also correctly set the group flag on the ChatterBoxInvitationHandler() so the IM you get from the lib before replying with a Accept will either have group=false for Friends confrences or group=true for standard group IM now.

I've tested in omvviewer light and starting and participating in conference works perfectly.

I think we can declare victory here!