Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added JavaScript 3.4 with FULL Multiplexing.
- Loading branch information
Showing
18 changed files
with
1,947 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,153 @@ | |||
# YOU MUST HAVE A PUBNUB ACCOUNT TO USE THE API. | |||
http://www.pubnub.com/account | |||
|
|||
## TESTLING - (OPTIONAL) | |||
PubNub JavaScript API for Web Browsers | |||
uses Testling Cloud Service for QA and Deployment. | |||
http://www.testling.com/ | |||
|
|||
You need this to run './test.sh' unit test. | |||
This is completely optional, however we love Testling. | |||
|
|||
|
|||
## PubNub 3.3.1 Real-time Cloud Push API - JAVASCRIPT | |||
http://www.pubnub.com - PubNub Real-time Push Service in the Cloud. | |||
http://www.pubnub.com/tutorial/javascript-push-api | |||
|
|||
PubNub is a blazingly fast cloud-hosted messaging service for building | |||
real-time web and mobile apps. Hundreds of apps and thousands of developers | |||
rely on PubNub for delivering human-perceptive real-time | |||
experiences that scale to millions of users worldwide. PubNub delivers | |||
the infrastructure needed to build amazing MMO games, social apps, | |||
business collaborative solutions, and more. | |||
|
|||
## SIMPLE EXAMPLE | |||
```html | |||
<div id=pubnub pub-key=demo sub-key=demo></div> | |||
<script src=http://cdn.pubnub.com/pubnub-3.3.1.min.js ></script> | |||
<script> | |||
// LISTEN | |||
PUBNUB.subscribe({ | |||
channel : "hello_world", | |||
callback : alert | |||
}) | |||
// SEND | |||
PUBNUB.publish({ | |||
channel : "hello_world", | |||
message : "Hi." | |||
}) | |||
</script> | |||
``` | |||
|
|||
## ADVANCED STYLE | |||
```html | |||
<div id=pubnub pub-key=demo sub-key=demo></div> | |||
<script src=http://pubnub.s3.amazonaws.com/pubnub-3.3.1.min.js ></script> | |||
<script>(function(){ | |||
// LISTEN FOR MESSAGES | |||
PUBNUB.subscribe({ | |||
channel : "hello_world", // CONNECT TO THIS CHANNEL. | |||
restore : false, // STAY CONNECTED, EVEN WHEN BROWSER IS CLOSED | |||
// OR WHEN PAGE CHANGES. | |||
callback : function(message) { // RECEIVED A MESSAGE. | |||
alert(message) | |||
}, | |||
connect : function() { // CONNECTION ESTABLISHED. | |||
PUBNUB.publish({ // SEND A MESSAGE. | |||
channel : "hello_world", | |||
message : "Hi from PubNub." | |||
}) | |||
}, | |||
disconnect : function() { // LOST CONNECTION. | |||
alert( | |||
"Connection Lost." + | |||
"Will auto-reconnect when Online." | |||
) | |||
}, | |||
reconnect : function() { // CONNECTION RESTORED. | |||
alert("And we're Back!") | |||
}, | |||
presence : function(message) { // Presence() example (see console for logged output.) | |||
console.log(message, true); | |||
} | |||
}) | |||
})(); | |||
</script> | |||
|
|||
<span onclick="hereNow()">Click Me for Here Now!</span> // here_now() example (see console for logged output.) | |||
<br/> | |||
<span onclick="history()">Click Me for History!</span> // detailedHistory() example (see console for logged output.) | |||
|
|||
<script type="text/javascript"> | |||
function hereNow() { | |||
PUBNUB.here_now({channel:'hello_world', callback:function (message) { | |||
console.log(message); | |||
}}); | |||
} | |||
function history() { | |||
PUBNUB.detailedHistory({count:10, channel:'hello_world', callback:function (message) { | |||
console.log(message); | |||
}}); | |||
} | |||
</script> | |||
|
|||
``` | |||
|
|||
## SSL MODE | |||
|
|||
```html | |||
<div id=pubnub ssl=on></div> | |||
<script src=https://pubnub.a.ssl.fastly.net/pubnub-3.3.1.min.js></script> | |||
<script>(function(){ | |||
var pubnub = PUBNUB.init({ | |||
publish_key : 'demo', | |||
subscribe_key : 'demo', | |||
origin : 'pubsub.pubnub.com', | |||
ssl : true | |||
}); | |||
pubnub.subscribe({ | |||
channel : 'my_channel', | |||
connect : function() { /* ... */ }, | |||
callback : function(message) { | |||
alert(JSON.stringify(message)); | |||
} | |||
}); | |||
})();</script> | |||
``` | |||
|
|||
## Using the PUBNUB init() Function | |||
|
|||
Sometimes you want to use create a PubNub Instance directly in JavaScript | |||
and pass the PubNub API Keys without using a DOM element. | |||
To do this, simply follow this `init` example: | |||
|
|||
```html | |||
<script src=http://cdn.pubnub.com/pubnub-3.3.1.min.js ></script> | |||
<script>(function(){ | |||
// INIT PubNub | |||
var pubnub = PUBNUB.init({ | |||
publish_key : 'demo', | |||
subscribe_key : 'demo', | |||
origin : 'pubsub.pubnub.com' | |||
}); | |||
// LISTEN | |||
pubnub.subscribe({ channel : "hello_world", callback : alert }) | |||
// SEND | |||
pubnub.publish({ channel : "hello_world", message : "Hi." }) | |||
})();</script> | |||
``` |
Binary file not shown.
This file contains 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
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,4 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<cross-domain-policy> | |||
<allow-access-from domain="*" secure="false" /> | |||
</cross-domain-policy> |
Empty file.
This file contains 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
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,155 @@ | |||
/* =-====================================================================-= */ | |||
/* =-====================================================================-= */ | |||
/* =-========================= JSON =============================-= */ | |||
/* =-====================================================================-= */ | |||
/* =-====================================================================-= */ | |||
|
|||
(window['JSON'] && window['JSON']['stringify']) || (function () { | |||
window['JSON'] || (window['JSON'] = {}); | |||
|
|||
if (typeof String.prototype.toJSON !== 'function') { | |||
String.prototype.toJSON = | |||
Number.prototype.toJSON = | |||
Boolean.prototype.toJSON = function (key) { | |||
return this.valueOf(); | |||
}; | |||
} | |||
|
|||
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, | |||
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, | |||
gap, | |||
indent, | |||
meta = { // table of character substitutions | |||
'\b': '\\b', | |||
'\t': '\\t', | |||
'\n': '\\n', | |||
'\f': '\\f', | |||
'\r': '\\r', | |||
'"' : '\\"', | |||
'\\': '\\\\' | |||
}, | |||
rep; | |||
|
|||
function quote(string) { | |||
escapable.lastIndex = 0; | |||
return escapable.test(string) ? | |||
'"' + string.replace(escapable, function (a) { | |||
var c = meta[a]; | |||
return typeof c === 'string' ? c : | |||
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); | |||
}) + '"' : | |||
'"' + string + '"'; | |||
} | |||
|
|||
|
|||
function str(key, holder) { | |||
var i, // The loop counter. | |||
k, // The member key. | |||
v, // The member value. | |||
length, | |||
mind = gap, | |||
partial, | |||
value = holder[key]; | |||
|
|||
if (value && typeof value === 'object' && | |||
typeof value.toJSON === 'function') { | |||
value = value.toJSON(key); | |||
} | |||
|
|||
if (typeof rep === 'function') { | |||
value = rep.call(holder, key, value); | |||
} | |||
|
|||
switch (typeof value) { | |||
case 'string': | |||
return quote(value); | |||
|
|||
case 'number': | |||
return isFinite(value) ? String(value) : 'null'; | |||
|
|||
case 'boolean': | |||
case 'null': | |||
return String(value); | |||
|
|||
case 'object': | |||
|
|||
if (!value) { | |||
return 'null'; | |||
} | |||
|
|||
gap += indent; | |||
partial = []; | |||
|
|||
if (Object.prototype.toString.apply(value) === '[object Array]') { | |||
|
|||
length = value.length; | |||
for (i = 0; i < length; i += 1) { | |||
partial[i] = str(i, value) || 'null'; | |||
} | |||
|
|||
v = partial.length === 0 ? '[]' : | |||
gap ? '[\n' + gap + | |||
partial.join(',\n' + gap) + '\n' + | |||
mind + ']' : | |||
'[' + partial.join(',') + ']'; | |||
gap = mind; | |||
return v; | |||
} | |||
if (rep && typeof rep === 'object') { | |||
length = rep.length; | |||
for (i = 0; i < length; i += 1) { | |||
k = rep[i]; | |||
if (typeof k === 'string') { | |||
v = str(k, value); | |||
if (v) { | |||
partial.push(quote(k) + (gap ? ': ' : ':') + v); | |||
} | |||
} | |||
} | |||
} else { | |||
for (k in value) { | |||
if (Object.hasOwnProperty.call(value, k)) { | |||
v = str(k, value); | |||
if (v) { | |||
partial.push(quote(k) + (gap ? ': ' : ':') + v); | |||
} | |||
} | |||
} | |||
} | |||
|
|||
v = partial.length === 0 ? '{}' : | |||
gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + | |||
mind + '}' : '{' + partial.join(',') + '}'; | |||
gap = mind; | |||
return v; | |||
} | |||
} | |||
|
|||
if (typeof JSON['stringify'] !== 'function') { | |||
JSON['stringify'] = function (value, replacer, space) { | |||
var i; | |||
gap = ''; | |||
indent = ''; | |||
|
|||
if (typeof space === 'number') { | |||
for (i = 0; i < space; i += 1) { | |||
indent += ' '; | |||
} | |||
} else if (typeof space === 'string') { | |||
indent = space; | |||
} | |||
rep = replacer; | |||
if (replacer && typeof replacer !== 'function' && | |||
(typeof replacer !== 'object' || | |||
typeof replacer.length !== 'number')) { | |||
throw new Error('JSON.stringify'); | |||
} | |||
return str('', {'': value}); | |||
}; | |||
} | |||
|
|||
if (typeof JSON['parse'] !== 'function') { | |||
// JSON is parsed on the server for security. | |||
JSON['parse'] = function (text) {return eval('('+text+')')}; | |||
} | |||
}()); |
Oops, something went wrong.