ソースを参照

msgpack added

Michelle Bu 12 年 前
コミット
0d4a4f3a21
6 ファイル変更53 行追加9 行削除
  1. 3 0
      .gitmodules
  2. 1 0
      public/js/msgpack
  3. 15 2
      public/js/sink.js
  4. 29 6
      public/js/source.js
  5. 3 1
      public/sink.html
  6. 2 0
      public/source.html

+ 3 - 0
.gitmodules

@@ -1,3 +1,6 @@
 [submodule "public/js/binarypack"]
 	path = public/js/binarypack
 	url = git@github.com:michellebu/js-binarypack.git
+[submodule "public/js/msgpack"]
+	path = public/js/msgpack
+	url = git@github.com:michellebu/msgpack-js-browser.git

+ 1 - 0
public/js/msgpack

@@ -0,0 +1 @@
+Subproject commit 4be53c9400537f82396c53645920637ad3251264

+ 15 - 2
public/js/sink.js

@@ -53,11 +53,12 @@ SinkPeer.prototype.socketInit = function(cb) {
 };
 
 SinkPeer.prototype.setupDataChannel = function() {
+  self = this;
   this._pc.ondatachannel = function(dc) {
     console.log('SINK: ondatachannel triggered');
-    dc.binaryType = "blob";
+    dc.binaryType = "arraybuffer";
     dc.onmessage = function(e) {
-      console.log(e.data);
+      self.handleDataMessage(e);
     };
     self._dc = dc;
   };
@@ -70,3 +71,15 @@ SinkPeer.prototype.setupDataChannel = function() {
     // ??
   };
 };
+
+SinkPeer.prototype.send = function(data) {
+  var ab = MsgPack.encode(data);
+  this._dc.send(ab);
+}
+
+// Handles a DataChannel message.
+// TODO: have these extend Peer, which will impl these generic handlers.
+SinkPeer.prototype.handleDataMessage = function(e) {
+  data = MsgPack.decode(e.data);
+  console.log(data);
+}

+ 29 - 6
public/js/source.js

@@ -83,10 +83,9 @@ SourcePeer.prototype.setupDataChannel = function(pc, target, cb) {
     console.log('SOURCE: onconnection triggered.');
     var dc = pc.createDataChannel(self._name, {}, target);
     self._dcs[target] = dc;
-    dc.binaryType = 'blob';
+    dc.binaryType = 'arraybuffer';
     dc.onmessage = function(e) {
-      self.handleDataMessage(dc, e);
-      // process e.data
+      self.handleDataMessage(e);
     };
   };
 
@@ -100,13 +99,37 @@ SourcePeer.prototype.setupDataChannel = function(pc, target, cb) {
   cb();
 };
 
-// Handles a Datachannel message.
-SourcePeer.prototype.handleDataMessage = function(dc, e) {
-  console.log(e.data);
+SourcePeer.prototype.send = function(data, sink) {
+  // TODO: try/catch
+  var ab = MsgPack.encode(data);
 
+  if (!!sink) {
+    this._dcs[sink].send(ab);
+    return;
+  }
+
+  for (var key in this._dcs) {
+    if (this._dcs.hasOwnProperty(key)) {
+      this._dcs[key].send(blob);
+    }
+  }
+
+}
+
+// Handles a DataChannel message.
+SourcePeer.prototype.handleDataMessage = function(e) {
+  var data = MsgPack.decode(e.data);
+  console.log(data);
+
+  if (!!this._dataHandler) {
+    this._dataHandler(data);
+  }
 }
 
 SourcePeer.prototype.on = function(code, cb) {
   // For enduser.
+  if (code === 'data') {
+    this._dataHandler = cb;
+  }
 };
 

+ 3 - 1
public/sink.html

@@ -8,8 +8,10 @@
 <meta name="keywords" content=""> 
 
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
-<script type="text/javascript" src="/js/sink.js"></script>
 <script src="/socket.io/socket.io.js"></script>
+<script type="text/javascript" src="/js/msgpack/msgpack.js"></script>
+<script type="text/javascript" src="/js/binarypack/dist/binarypack.js"></script>
+<script type="text/javascript" src="/js/sink.js"></script>
 <script>
 
 </script>

+ 2 - 0
public/source.html

@@ -9,6 +9,8 @@
 
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
 <script src="/socket.io/socket.io.js"></script>
+<script type="text/javascript" src="/js/binarypack/dist/binarypack.js"></script>
+<script type="text/javascript" src="/js/msgpack/msgpack.js"></script>
 <script type="text/javascript" src="/js/source.js"></script>
 <script>