init :octocat:

This commit is contained in:
DadaMonad 2015-02-12 16:43:51 +00:00
commit d5cf2c88ff
9 changed files with 11239 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
node_modules

12
build/browser/test.html Normal file
View file

@ -0,0 +1,12 @@
<!--
To change this template use Tools | Templates.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="./y-webrtc.js"></script>
</head>
<body>
</body>
</html>

10959
build/browser/y-webrtc.js Normal file

File diff suppressed because one or more lines are too long

66
build/node/y-webrtc.js Normal file
View file

@ -0,0 +1,66 @@
var SimpleWebRTC = require('simplewebrtc');
function WebRTC(room, webrtc_options){
var swr = new SimpleWebRTC({
debug: true
})
this.swr = swr;
var self = this;
var channel;
swr.on('createdPeer',function(conn){
swr.joinRoom(room, function(){
swr.on("channelOpen", function(){
var when_bound_to_y = function(){
self.init({
role : "slave",
syncMethod : "syncAll",
user_id : conn.id
})
}
swr.on("channelMessage", function(peer, room, message){
if(message.type === "yjs"){
console.log(message.payload);
}
if(this.is_bound_to_y && message.type === "yjs"){
this.receiveMessage(peer.id, JSON.parse(message.payload))
}
})
})
})
})
}
WebRTC.prototype.send = function(uid, message){
var peer = this.swr.webrtc.getPeers(uid)[0];
peer.sendDirectly("simplewebrtc", "yjs", "message");
}
WebRTC.prototype.broadcast = function(message){
this.swr.sendDirectlyToAll("simplewebrtc","yjs",message);
}
if(window != null){
if(window.Y != null){
window.Y.WebRTC = WebRTC;
} else {
// console.err("You must first include Y, and then the WebRTC Connector!")
}
}
if(module != null){
module.exports = WebRTC;
}
window.webrtc = new WebRTC("stuffy", {
debug: true
});

56
gulpfile.coffee Normal file
View file

@ -0,0 +1,56 @@
gulp = require 'gulp'
uglify = require 'gulp-uglify'
plumber = require 'gulp-plumber'
browserify = require 'gulp-browserify'
rename = require 'gulp-rename'
ignore = require 'gulp-ignore'
jshint = require 'gulp-jshint'
paths =
webrtc: ['./lib/y-webrtc.js']
buildConnector = (connector_name)->
()->
gulp.src(paths[connector_name])
.pipe plumber()
.pipe jshint()
.pipe jshint.reporter()
gulp.src(paths[connector_name])
.pipe(plumber())
.pipe(browserify(
insertGlobals: true
debug: true
))
.pipe gulp.dest('./build/browser/')
.pipe uglify()
.pipe gulp.dest('./')
gulp.src './*.html'
.pipe gulp.dest './build/browser/'
gulp.task 'build_node', ->
gulp.src(['./lib/**'])
.pipe plumber()
.pipe gulp.dest './build/node/'
gulp.task 'webrtc', [], buildConnector 'webrtc'
gulp.task 'build_browser', ['webrtc']
gulp.task 'build', ['build_browser', 'build_node']
# Rerun the task when a file changes
gulp.task 'watch', ()->
gulp.watch(paths.webrtc, ['webrtc'])
gulp.task('default', ['watch', 'build'])

88
lib/y-webrtc.js Normal file
View file

@ -0,0 +1,88 @@
var SimpleWebRTC = require('simplewebrtc');
function WebRTC(room, webrtc_options){
if(webrtc_options === undefined){
webrtc_options = {}
}
if(webrtc_options.url === undefined){
webrtc_options.url = "http://yatta.ninja:8888"
}
var swr = new SimpleWebRTC(webrtc_options);
this.swr = swr;
var self = this;
var channel;
swr.once('connectionReady',function(user_id){
swr.joinRoom(room)
swr.once('joinedRoom', function(){
swr.once('')
var when_bound_to_y = function(){
self.init({
role : "slave",
syncMethod : "syncAll",
user_id : user_id
});
for(i in self.swr.webrtc.peers){
self.userJoined(self.swr.webrtc.peers[i].id, "slave");
}
};
if(self.is_bound_to_y !== undefined && self.is_bound_to_y){
when_bound_to_y()
} else {
self.on_bound_to_y = when_bound_to_y;
}
swr.on("channelMessage", function(peer, room, message){
if(self.is_bound_to_y && message.type === "yjs"){
self.receiveMessage(peer.id, message.payload);
}
});
});
swr.on("createdPeer", function(peer){
if(self.is_initialized){
self.userJoined(peer.id, "slave");
}
});
swr.on("peerStreamRemoved",function(peer){
if(self.is_initialized){
self.userLeft(peer.id);
}
})
})
}
WebRTC.prototype.send = function(uid, message){
var self = this;
var send = function(){
var peer = self.swr.webrtc.getPeers(uid)[0];
if(peer){
var success = peer.sendDirectly("simplewebrtc", "yjs", message);
}
if(!success){
window.setTimeout(send,500)
}
}
send()
};
WebRTC.prototype.broadcast = function(message){
this.swr.sendDirectlyToAll("simplewebrtc","yjs",message);
};
if(window !== undefined){
if(window.Y !== undefined){
window.Y.WebRTC = WebRTC;
} else {
// console.err("You must first include Y, and then the WebRTC Connector!")
}
}
if(module !== undefined){
module.exports = WebRTC;
}

39
package.json Normal file
View file

@ -0,0 +1,39 @@
{
"name": "y-webrtc",
"version": "0.4.0",
"description": "WebRTC Connector for Yjs",
"main": "y-webrtc.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/rwth-acis/y-webrtc.git"
},
"keywords": [
"Yjs",
"Connector"
],
"author": "Kevin Jahns <kevin.jahns@rwth-aachen.de>",
"license": "MIT",
"bugs": {
"url": "https://github.com/rwth-acis/y-webrtc/issues"
},
"homepage": "https://github.com/rwth-acis/y-webrtc",
"dependencies": {
"simplewebrtc": "^1.13.1"
},
"devDependencies": {
"coffee-script": "^1.9.0",
"gulp": "^3.8.11",
"gulp-browserify": "^0.5.1",
"gulp-coffee": "^2.3.1",
"gulp-coffeelint": "^0.4.0",
"gulp-ignore": "^1.2.1",
"gulp-jshint": "^1.9.2",
"gulp-plumber": "^0.6.6",
"gulp-rename": "^1.2.0",
"gulp-uglify": "^1.1.0",
"jshint": "^2.6.0"
}
}

12
test.html Normal file
View file

@ -0,0 +1,12 @@
<!--
To change this template use Tools | Templates.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="./y-webrtc.js"></script>
</head>
<body>
</body>
</html>

5
y-webrtc.js Normal file

File diff suppressed because one or more lines are too long