Skip to content

Instantly share code, notes, and snippets.

@penguinbroker
Created December 20, 2011 18:36
Show Gist options
  • Save penguinbroker/1502661 to your computer and use it in GitHub Desktop.
Save penguinbroker/1502661 to your computer and use it in GitHub Desktop.
TokBox integrated chat lib
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&nbsp;<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&nbsp;<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