Created
December 20, 2011 18:36
-
-
Save penguinbroker/1502661 to your computer and use it in GitHub Desktop.
TokBox integrated chat lib
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Chat = { | |
video: { | |
apiKey: 1935341, | |
subscribers: {}, | |
publisherProps: { | |
width: 100, | |
height: 80, | |
name: tbMyName | |
}, | |
subscriberProps: { | |
width: 100, | |
height: 80 | |
}, | |
_connected: 0, | |
_sessID: null, | |
_token: null, | |
_session: null, | |
_publisher: null, | |
_isPublishing: 0, | |
_numStreams: 0, | |
connect: function () { | |
var opts; | |
opts = { | |
url: 'index.php/chat/getSessionId', | |
type: 'POST', | |
data: { | |
'room': tbGID | |
}, | |
dataType: 'JSON', | |
statusCode: { | |
200: function (data) { | |
return Chat.video.connected(data); | |
}, | |
301: function (data) { | |
window.location.href = siteURL; | |
}, | |
302: function (data) { | |
window.location.href = siteURL; | |
}, | |
404: function () { | |
return $("#chatPod-" + room + " div.mask").html('<div class="loading">error <a href="javascript: void(0);" onclick="Chat.video.connect("' + room + '");">try again</a></div>'); | |
}, | |
500: function (data) { | |
return $("#chatPod-" + room + " div.mask").html('<div class="loading">error <a href="javascript: void(0);" onclick="Chat.video.connect("' + room + '");">try again</a></div>'); | |
} | |
} | |
}; | |
return $.ajax(opts); | |
}, | |
connected: function (data) { | |
var sessID, session; | |
sessID = data.sessID; | |
if (typeof sessID === 'object') sessID = data.sessID[0]; | |
Chat.video._sessID = sessID; | |
Chat.video._token = data.token; | |
if (TB.checkSystemRequirements() !== TB.HAS_REQUIREMENTS) { | |
TBA.growl('video not available'); | |
alert("You don't have the minimum requirements for video chat. Please upgrade to the latest version of Flash."); | |
return; | |
} | |
TB.setLogLevel(5); | |
log('got tokbox token, initializing session'); | |
session = TB.initSession(sessID); | |
session.addEventListener('sessionConnected', Chat.video.sessionConnectedHandler); | |
session.addEventListener('sessionDisconnected', Chat.video.sessionDisconnectedHandler); | |
session.addEventListener('connectionCreated', Chat.video.connectionCreatedHandler); | |
session.addEventListener('connectionDestroyed', Chat.video.connectionDestroyedHandler); | |
session.addEventListener('streamCreated', Chat.video.streamCreatedHandler); | |
session.addEventListener('streamDestroyed', Chat.video.streamDestroyedHandler); | |
session.connect(Chat.video.apiKey, data.token); | |
return Chat.video._session = session; | |
}, | |
enable: function (me) { | |
var pubDiv; | |
if (Chat.video._connected === 0) { | |
alert('Unable to connect to TokBox servers'); | |
return; | |
} | |
if (Chat.video._isPublishing) return; | |
pubDiv = document.createElement('div'); | |
pubDiv.setAttribute('id', 'opentok_publisher'); | |
$("#myFeed").html(pubDiv); | |
$('#myFeedToggler').hide(); | |
$('#myFeedWrapper').removeClass('active').addClass('prompt'); | |
Chat.video._publisher = Chat.video._session.publish(pubDiv.id, Chat.video.publisherProps); | |
Chat.video._publisher.addEventListener('accessAllowed', Chat.video.accessAllowedHandler); | |
return Chat.video._publisher.addEventListener('accessDenied', Chat.video.accessDeniedHandler); | |
}, | |
disable: function (me) { | |
$('#webcamAction').hide(); | |
$('#myFeedWrapper').removeClass('prompt').removeClass('active'); | |
$('#myFeedToggler').fadeIn(200); | |
if (Chat.video._publisher) { | |
Chat.video._session.unpublish(Chat.video._publisher); | |
} | |
Chat.video._publisher = null; | |
return Chat.video._isPublishing = 0; | |
}, | |
accessAllowedHandler: function (event) { | |
$('#myFeedWrapper').removeClass('prompt').addClass('active'); | |
Chat.video._isPublishing = 1; | |
return $('#webcamAction').fadeIn(200); | |
}, | |
accessDeniedHandler: function (event) { | |
$('#webcamAction').hide(); | |
$('#myFeedWrapper').removeClass('prompt').removeClass('active'); | |
return $('#myFeedToggler').fadeIn(200); | |
}, | |
streamCreatedHandler: function (event) { | |
var sessionID, stream, _i, _len, _ref, _results; | |
$('#videoPanel div.header').addClass('online'); | |
Chat.video._connected = 1; | |
sessionID = event['target']['sessionId']; | |
_ref = event.streams; | |
_results = []; | |
for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
stream = _ref[_i]; | |
_results.push(Chat.video.addStream(stream, sessionID)); | |
} | |
return _results; | |
}, | |
streamDestroyedHandler: function (event) { | |
var sessionID; | |
sessionID = null; | |
try { | |
sessionID = event['target']['sessionId']; | |
} catch (err) { | |
return; | |
} | |
return Chat.video._numStreams--; | |
}, | |
sessionConnectedHandler: function (event) { | |
var sessionID, stream, _i, _len, _ref, _results; | |
$('#videoPanel div.header').addClass('online'); | |
Chat.video._connected = 1; | |
sessionID = event['target']['sessionId']; | |
_ref = event.streams; | |
_results = []; | |
for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
stream = _ref[_i]; | |
_results.push(Chat.video.addStream(stream, sessionID)); | |
} | |
return _results; | |
}, | |
sessionDisconnectedHandler: function (event) { | |
$('#videoPanel div.header').removeClass('online'); | |
Chat.video._connected = 0; | |
Chat.video._publisher = null; | |
Chat.video._isPublishing = 0; | |
Chat.video._session = null; | |
return Chat.video._numStreams = 0; | |
}, | |
connectionDestroyedHandler: function (event) {}, | |
connectionCreatedHandler: function (event) { | |
$('#videoPanel div.header').addClass('online'); | |
return Chat.video._connected = 1; | |
}, | |
/* | |
# If you un-comment the call to TB.addEventListener("exception", exceptionHandler) above, OpenTok calls the | |
# exceptionHandler() method when exception events occur. You can modify this method to further process exception events. | |
# If you un-comment the call to TB.setLogLevel(), above, OpenTok automatically displays exception event messages. | |
*/ | |
exceptionHandler: function (event) { | |
return log("Exception: " + event.code + " :: " + event.message); | |
}, | |
addStream: function (stream, sessID) { | |
var session, subDiv; | |
session = Chat.video._session; | |
if (stream.connection.connectionId === session.connection.connectionId) { | |
Chat.video._session._isPublishing = 1; | |
return; | |
} | |
subDiv = document.createElement('div'); | |
subDiv.setAttribute('id', stream.streamId); | |
$("#videos").append(subDiv); | |
Chat.video.subscribers[stream.streamId] = session.subscribe(stream, subDiv.id, Chat.video.subscriberProps); | |
return Chat.video._numStreams++; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment