Revision: 2801
Author: [email protected]
Date: Wed Jan 20 07:45:34 2010
Log: Added instant communication plugin code
http://code.google.com/p/openmeetings/source/detail?r=2801

Added:
 /trunk/plugins/instant_communication_plugin/masterslavedeterminator.js

=======================================
--- /dev/null
+++ /trunk/plugins/instant_communication_plugin/masterslavedeterminator.js Wed Jan 20 07:45:34 2010
@@ -0,0 +1,424 @@
+var masterUpdateTimer = setInterval( updateMasterStatus, 1000 );
+var masterStatus = false;
+var my_id = uuid4String();
+
+var om_onstatuschange_last = '%E%';
+var om_onmakecall_last = '%E%';
+var om_onincomingcall_last = '%E%';
+var om_oncallanswered_last = '%E%';
+var om_oncallrejected_last = '%E%';
+var om_onstatusmessage_last = '%E%';
+var om_callstate = '%E%';
+
+var sv_s_addr;
+var sv_o_link;
+var sv_id = null;
+var sv_displayname = '';
+
+function master_init()
+{
+       om_setinstanceid(my_id);
+
+       jaaulde.utils.cookies.set('onstatuschange','%E%');
+       jaaulde.utils.cookies.set('onmakecall','%E%');
+       jaaulde.utils.cookies.set('onincomingcall','%E%');
+       jaaulde.utils.cookies.set('oncallanswered','%E%');
+       jaaulde.utils.cookies.set('oncallrejected','%E%');
+       jaaulde.utils.cookies.set('onstatusmessage','%E%');
+       jaaulde.utils.cookies.set('messageQueue','%E%');
+       jaaulde.utils.cookies.set('callstate','N');
+}
+
+
+function utcNow()
+{
+       var currentDate = new Date();
+       return Date.UTC(currentDate.getFullYear(),
+                                               currentDate.getMonth(),
+                                               currentDate.getDay(),
+                                               currentDate.getHours(),
+                                               currentDate.getMinutes(),
+                                               currentDate.getSeconds(),
+                                               currentDate.getMilliseconds());
+}
+
+function updateMasterStatus()
+{
+       var currentCookie = jaaulde.utils.cookies.get('master_id');
+       var previousStatus = masterStatus;
+
+       if ( currentCookie != null )
+       {
+               var args = currentCookie.split('|');
+
+               if ( args[ 0 ] != my_id )
+               {
+                       //We are slave?
+
+                       var delta = utcNow() - parseInt(args[1]);
+
+                       if ( delta > 5000 )
+                       {
+                               //We are master since timeout has expired
+                               var data = my_id + '|' + utcNow();
+
+                               jaaulde.utils.cookies.del( 'master_id' );
+                               jaaulde.utils.cookies.set( 'master_id', data );
+
+                               masterStatus = true;
+
+                               om_setserveraddress( sv_s_addr );
+                               om_setomlink( sv_o_link );
+                       }
+                       else
+                       {
+                               //Timeout is ok, we are a slave
+                               masterStatus = false;
+                       }
+               }
+               else
+               {
+                       //We are master, refreshing time
+                       var data = my_id + '|' + utcNow()
+
+                       jaaulde.utils.cookies.del( 'master_id' );
+                       jaaulde.utils.cookies.set( 'master_id', data );
+                       masterStatus = true;
+               }
+       }
+       else
+       {
+               //We are master, setting time
+               var data = my_id + '|' + utcNow();
+
+               masterStatus = true;
+               jaaulde.utils.cookies.set( 'master_id', data );
+
+               om_setserveraddress( sv_s_addr );
+               om_setomlink( sv_o_link );
+       }
+
+       if ( previousStatus != masterStatus )
+       {
+               my_masterstatuschanged( masterStatus );
+
+               if ( masterStatus )
+               {
+                       master_init();
+
+ //TODO: implement what should be done when we are logged in but the master window is closed
+                       if ( sv_id != null )
+                       {
+                               om_login(sv_id, sv_displayname);
+                       }
+               }
+       }
+
+       if ( masterStatus )
+       {
+               parseMessageQueue();
+       }
+
+       updateParameters();
+}
+
+function postMessageToQueue( methodName, arg0, arg1 )
+{
+       var messageQueue = jaaulde.utils.cookies.get('messageQueue');
+       jaaulde.utils.cookies.del('messageQueue');
+
+       if ( messageQueue != '%E%' )
+       {
+ messageQueue = methodName + '!#!' + arg0 + '!#!' + arg1 + '~#~' + messageQueue;
+       }
+       else
+       {
+               messageQueue = methodName + '!#!' + arg0 + '!#!' + arg1 + '~#~';
+       }
+
+       jaaulde.utils.cookies.set('messageQueue', messageQueue);
+}
+
+function sv_setuserinfo(id, name)
+{
+       sv_id = id;
+       sv_displayname = name;
+}
+
+function sv_setserveraddress(address)
+{
+       sv_s_addr = address;
+}
+
+function sv_setomlink(link)
+{
+       sv_o_link = link;
+}
+
+function sv_login(id, name)
+{
+       postMessageToQueue('login',id, name);
+}
+
+function sv_logoff()
+{
+       postMessageToQueue('logoff');
+}
+
+function sv_makecall(callee)
+{
+       postMessageToQueue('makecall',callee);
+}
+
+function sv_answercall()
+{
+       postMessageToQueue('answer');
+}
+
+function sv_rejectcall(caller)
+{
+       postMessageToQueue('reject');
+}
+
+function sv_clearoutgoingcall()
+{
+       postMessageToQueue('clearout');
+}
+
+function sv_clearincomingcall()
+{
+       postMessageToQueue('clearin');
+}
+
+function parseMessageQueue()
+{
+       var messageQueueString = jaaulde.utils.cookies.get('messageQueue');
+       jaaulde.utils.cookies.set('messageQueue','%E%');
+
+       if ( messageQueueString != null )
+       {
+               if ( messageQueueString != '%E%')
+               {
+                       var messages = messageQueueString.split('~#~');
+                       for ( var i = 0; i < messages.length; i++ )
+                       {
+                               if ( messages[i] != '' )
+                               {
+                                       var elements = messages[i].split('!#!');
+
+                                       switch ( elements[0] )
+                                       {
+                                               case 'login':
+                                               {
+                                                       om_login( elements[1], 
elements[2] );
+
+                                                       break;
+                                               }
+                                               case 'makecall':
+                                               {
+                                                       om_makecall( 
elements[1] );
+
+                                                       break;
+                                               }
+                                               case 'answer':
+                                               {
+                                                       om_answercall();
+
+                                                       break;
+                                               }
+                                               case 'reject':
+                                               {
+                                                       om_rejectCall();
+
+                                                       break;
+                                               }
+                                               case 'clearout':
+                                               {
+                                                       om_clearoutgoingcall();
+
+                                                       
jaaulde.utils.cookies.set('oncallanswered','%E%');
+
+                                                       
jaaulde.utils.cookies.set('oncallrejected','%E%');
+
+                                                       break;
+                                               }
+                                               case 'clearin':
+                                               {
+                                                       
//om_clearincomingcall();
+
+                                                       
jaaulde.utils.cookies.set('onincomingcall','%E%');
+
+                                                       break;
+                                               }
+                                               case 'logoff':
+                                               {
+                                                       om_logoff();
+
+                                                       break;
+                                               }
+                                               default:
+                                               {
+ alert("parseMessageQueue - message "+messageQueueString + " unparsable, element: " + elements[0] );
+
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+function om_onstatuschange(status)
+{
+       if ( status )
+       {
+               jaaulde.utils.cookies.set('onstatuschange','ON');
+       }
+       else
+       {
+               jaaulde.utils.cookies.set('onstatuschange','OFF');
+       }
+}
+
+function om_onmakecall(result)
+{
+       if ( status )
+       {
+               jaaulde.utils.cookies.set('onmakecall','OK');
+       }
+       else
+       {
+               jaaulde.utils.cookies.set('onmakecall','FL');
+       }
+}
+
+function om_onincomingcall(caller, link)
+{
+       jaaulde.utils.cookies.set('onincomingcall',caller+'!#!'+link);
+}
+
+function om_oncallanswered( callee, link )
+{
+       jaaulde.utils.cookies.set('oncallanswered',callee+'!#!'+link);
+}
+
+function om_oncallrejected( callee )
+{
+       jaaulde.utils.cookies.set('oncallrejected',callee);
+}
+
+function om_onincomingcallstatechanged( state )
+{
+       if ( state )
+       {
+               jaaulde.utils.cookies.set('callstate','C');
+       }
+       else
+       {
+               jaaulde.utils.cookies.set('callstate','N');
+       }
+}
+
+function om_onstatusmessage( message )
+{
+       var oldMessage = jaaulde.utils.cookies.get('onstatusmessage');
+       if ( oldMessage != '%E%' )
+       {
+               jaaulde.utils.cookies.set('onstatusmessage',oldMessage+message);
+       }
+       else
+       {
+               jaaulde.utils.cookies.set('onstatusmessage',message);
+       }
+}
+
+function updateParameters()
+{
+       var temp = jaaulde.utils.cookies.get('onstatusmessage');
+       if ( temp != om_onstatusmessage_last )
+       {
+               my_onstatusmessage( temp );
+               om_onstatusmessage_last = '%E%';
+               jaaulde.utils.cookies.set('onstatusmessage','%E%');
+       }
+       temp = jaaulde.utils.cookies.get('oncallrejected');
+       if ( temp != om_oncallrejected_last )
+       {
+               if ( temp != '%E%' )
+               {
+                       my_oncallrejected( temp );
+                       om_oncallrejected_last = temp;
+               }
+               else
+               {
+                       my_clearrejected();
+               }
+
+               om_oncallrejected_last = temp;
+       }
+       temp = jaaulde.utils.cookies.get('oncallanswered');
+       if ( temp != om_oncallanswered_last )
+       {
+               if ( temp != '%E%' )
+               {
+                       var params = temp.split('!#!');
+                       my_oncallanswered( params[0], params[1] );
+               }
+               else
+               {
+                       my_clearanswered();
+               }
+
+               om_oncallanswered_last = temp;
+       }
+       temp = jaaulde.utils.cookies.get('onincomingcall');
+       if ( temp != om_onincomingcall_last )
+       {
+               if ( temp != '%E%' )
+               {
+                       var params = temp.split('!#!');
+                       my_onincomingcall( params[0], params[1] );
+               }
+               else
+               {
+                       my_clearincoming();
+               }
+               om_onincomingcall_last = temp;
+       }
+       temp = jaaulde.utils.cookies.get('onmakecall');
+       if ( temp != om_onmakecall_last )
+       {
+               if ( temp = "OK" )
+               {
+                       my_onmakecall( true );
+               }
+               else
+               {
+                       my_onmakecall( false );
+               }
+               om_onmakecall_last = temp;
+       }
+       temp = jaaulde.utils.cookies.get('onstatuschange');
+       if ( temp != om_onstatuschange_last )
+       {
+               if ( temp == 'ON' )
+               {
+                       my_onstatuschange( true );
+               }
+               else
+               {
+                       my_onstatuschange( false );
+               }
+               om_onstatuschange_last = temp;
+       }
+       temp = jaaulde.utils.cookies.get('callstate');
+       if ( temp != om_callstate )
+       {
+               if ( temp == 'N' )
+               {
+                       my_clearincoming();
+               }
+               om_callstate = temp;
+       }
+}
-- 
You received this message because you are subscribed to the Google Groups 
"OpenMeetings developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/openmeetings-dev?hl=en.


Reply via email to