|
|
@@ -1,278 +0,0 @@
|
|
|
-/**
|
|
|
- * Make sure the charset of the page using this script is
|
|
|
- * set to utf-8 or you will not get the correct results.
|
|
|
- */
|
|
|
-var utf8 = (function () {
|
|
|
- var highSurrogateMin = 0xd800,
|
|
|
- highSurrogateMax = 0xdbff,
|
|
|
- lowSurrogateMin = 0xdc00,
|
|
|
- lowSurrogateMax = 0xdfff,
|
|
|
- surrogateBase = 0x10000;
|
|
|
-
|
|
|
- function isHighSurrogate(charCode) {
|
|
|
- return highSurrogateMin <= charCode && charCode <= highSurrogateMax;
|
|
|
- }
|
|
|
-
|
|
|
- function isLowSurrogate(charCode) {
|
|
|
- return lowSurrogateMin <= charCode && charCode <= lowSurrogateMax;
|
|
|
- }
|
|
|
-
|
|
|
- function combineSurrogate(high, low) {
|
|
|
- return ((high - highSurrogateMin) << 10) + (low - lowSurrogateMin) + surrogateBase;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Convert charCode to JavaScript String
|
|
|
- * handling UTF16 surrogate pair
|
|
|
- */
|
|
|
- function chr(charCode) {
|
|
|
- var high, low;
|
|
|
-
|
|
|
- if (charCode < surrogateBase) {
|
|
|
- return String.fromCharCode(charCode);
|
|
|
- }
|
|
|
-
|
|
|
- // convert to UTF16 surrogate pair
|
|
|
- high = ((charCode - surrogateBase) >> 10) + highSurrogateMin,
|
|
|
- low = (charCode & 0x3ff) + lowSurrogateMin;
|
|
|
-
|
|
|
- return String.fromCharCode(high, low);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Convert JavaScript String to an Array of
|
|
|
- * UTF8 bytes
|
|
|
- * @export
|
|
|
- */
|
|
|
- function stringToBytes(str) {
|
|
|
- var bytes = [],
|
|
|
- strLength = str.length,
|
|
|
- strIndex = 0,
|
|
|
- charCode, charCode2;
|
|
|
-
|
|
|
- while (strIndex < strLength) {
|
|
|
- charCode = str.charCodeAt(strIndex++);
|
|
|
-
|
|
|
- // handle surrogate pair
|
|
|
- if (isHighSurrogate(charCode)) {
|
|
|
- if (strIndex === strLength) {
|
|
|
- throw new Error('Invalid format');
|
|
|
- }
|
|
|
-
|
|
|
- charCode2 = str.charCodeAt(strIndex++);
|
|
|
-
|
|
|
- if (!isLowSurrogate(charCode2)) {
|
|
|
- throw new Error('Invalid format');
|
|
|
- }
|
|
|
-
|
|
|
- charCode = combineSurrogate(charCode, charCode2);
|
|
|
- }
|
|
|
-
|
|
|
- // convert charCode to UTF8 bytes
|
|
|
- if (charCode < 0x80) {
|
|
|
- // one byte
|
|
|
- bytes.push(charCode);
|
|
|
- }
|
|
|
- else if (charCode < 0x800) {
|
|
|
- // two bytes
|
|
|
- bytes.push(0xc0 | (charCode >> 6));
|
|
|
- bytes.push(0x80 | (charCode & 0x3f));
|
|
|
- }
|
|
|
- else if (charCode < 0x10000) {
|
|
|
- // three bytes
|
|
|
- bytes.push(0xe0 | (charCode >> 12));
|
|
|
- bytes.push(0x80 | ((charCode >> 6) & 0x3f));
|
|
|
- bytes.push(0x80 | (charCode & 0x3f));
|
|
|
- }
|
|
|
- else {
|
|
|
- // four bytes
|
|
|
- bytes.push(0xf0 | (charCode >> 18));
|
|
|
- bytes.push(0x80 | ((charCode >> 12) & 0x3f));
|
|
|
- bytes.push(0x80 | ((charCode >> 6) & 0x3f));
|
|
|
- bytes.push(0x80 | (charCode & 0x3f));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return bytes;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Convert an Array of UTF8 bytes to
|
|
|
- * a JavaScript String
|
|
|
- * @export
|
|
|
- */
|
|
|
- function bytesToString(bytes) {
|
|
|
- var str = '',
|
|
|
- length = bytes.length,
|
|
|
- index = 0,
|
|
|
- byte,
|
|
|
- charCode;
|
|
|
-
|
|
|
- while (index < length) {
|
|
|
- // first byte
|
|
|
- byte = bytes[index++];
|
|
|
-
|
|
|
- if (byte < 0x80) {
|
|
|
- // one byte
|
|
|
- charCode = byte;
|
|
|
- }
|
|
|
- else if ((byte >> 5) === 0x06) {
|
|
|
- // two bytes
|
|
|
- charCode = ((byte & 0x1f) << 6) | (bytes[index++] & 0x3f);
|
|
|
- }
|
|
|
- else if ((byte >> 4) === 0x0e) {
|
|
|
- // three bytes
|
|
|
- charCode = ((byte & 0x0f) << 12) | ((bytes[index++] & 0x3f) << 6) | (bytes[index++] & 0x3f);
|
|
|
- }
|
|
|
- else {
|
|
|
- // four bytes
|
|
|
- charCode = ((byte & 0x07) << 18) | ((bytes[index++] & 0x3f) << 12) | ((bytes[index++] & 0x3f) << 6) | (bytes[index++] & 0x3f);
|
|
|
- }
|
|
|
-
|
|
|
- str += chr(charCode);
|
|
|
- }
|
|
|
-
|
|
|
- return str;
|
|
|
- }
|
|
|
-
|
|
|
- return {
|
|
|
- stringToBytes: stringToBytes,
|
|
|
- bytesToString: bytesToString
|
|
|
- };
|
|
|
-}());
|
|
|
-
|
|
|
-'use strict';
|
|
|
-
|
|
|
-var app = angular.module('app', [
|
|
|
- 'ui.router',
|
|
|
- 'templatescache',
|
|
|
- 'ngAnimate'
|
|
|
- ]);
|
|
|
-angular.module('app').run(['$rootScope', '$state', '$stateParams',
|
|
|
- function($rootScope, $state, $stateParams) {
|
|
|
- $rootScope.$state = $state;
|
|
|
- $rootScope.$stateParams = $stateParams;
|
|
|
- }
|
|
|
-]).config(['$stateProvider', '$urlRouterProvider',
|
|
|
- function($stateProvider, $urlRouterProvider) {
|
|
|
- $urlRouterProvider.otherwise('/peer'); //
|
|
|
- $stateProvider.state('peer', {
|
|
|
- url: '/peer',
|
|
|
- templateUrl: 'templates/peer.html',
|
|
|
- controller: 'PeerController'
|
|
|
- });
|
|
|
- }
|
|
|
-])
|
|
|
-angular.module('templatescache', []).run(['$templateCache', function($templateCache) {$templateCache.put('templates/peer.html','<div style="margin:5px">\n\n</div>');}]);
|
|
|
-'use strict';
|
|
|
-
|
|
|
-angular.module('app').controller('PeerController', ['$scope', '$state', '$timeout', function ($scope, $state, $timeout) {
|
|
|
-
|
|
|
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', '_Register', '', $scope);
|
|
|
- var onConnected = function (c) {
|
|
|
- c.on('data', function (data) {
|
|
|
- // console.log('接收数据:', data.byteLength);
|
|
|
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', 'OnRecv', data, $scope);
|
|
|
- });
|
|
|
- c.on('close', function () {
|
|
|
- delete $scope.connectedPeers[c.peer];
|
|
|
- });
|
|
|
- $scope.connectedPeers[c.peer] = 1;
|
|
|
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', 'OnConnected', '{"loginName":"'+c.peer+'"}', $scope);
|
|
|
- };
|
|
|
- $scope.options = {
|
|
|
- host: '120.26.136.253',
|
|
|
- port: 9000,
|
|
|
- debug: 3,
|
|
|
- config: {
|
|
|
- 'iceServers': [{
|
|
|
- 'url': 'stun:lqq@59.110.63.164',
|
|
|
- "credential": "123456"
|
|
|
- },
|
|
|
- {
|
|
|
- "url": "turn:lqq@59.110.63.164",
|
|
|
- "credential": "123456"
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- key: 'peerjs',
|
|
|
- logFunction: function () {
|
|
|
- var copy = Array.prototype.slice.call(arguments).join(' ');
|
|
|
- console.info(copy);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- $scope.init = function (jsonStr) {
|
|
|
- console.log(jsonStr);
|
|
|
- var data = JSON.parse(jsonStr);
|
|
|
- $scope.loginName = data.loginName;
|
|
|
- $scope.peer = new Peer(
|
|
|
- $scope.loginName,
|
|
|
- $scope.options
|
|
|
- );
|
|
|
- $scope.connectedPeers = {};
|
|
|
- $scope.peer.on('open', function (id) {
|
|
|
- console.log(id);
|
|
|
- });
|
|
|
- $scope.peer.on('connection', function(c){
|
|
|
- c.on('open', function () {
|
|
|
- onConnected(c);
|
|
|
- });
|
|
|
- });
|
|
|
- $scope.peer.on('error', function (err) {
|
|
|
- $timeout(function () {
|
|
|
- $scope.init(jsonStr);
|
|
|
- }, 50000);
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- $scope.connect = function (jsonStr) {
|
|
|
- var data = JSON.parse(jsonStr);
|
|
|
- data = _.assign(data, {
|
|
|
- label: 'file',
|
|
|
- serialization:'binary'
|
|
|
- });
|
|
|
- console.info(data);
|
|
|
- if (!$scope.connectedPeers[data.loginName]) {
|
|
|
- var c = $scope.peer.connect(data.loginName, data);
|
|
|
- c.on('open', function () {
|
|
|
- onConnected(c);
|
|
|
- });
|
|
|
- c.on('error', function (err) {
|
|
|
- console.log(err);
|
|
|
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', 'OnDisconnected', '{"loginName":"'+c.peer+'"}', $scope);
|
|
|
- });
|
|
|
- $scope.connectedPeers[data.loginName] = 1;
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.send = function (jsonStr, data) {
|
|
|
- var param = JSON.parse(jsonStr);
|
|
|
- data = data.slice(0);
|
|
|
- // console.log('发送数据:', data.byteLength);
|
|
|
- var c = $scope.peer.connections[param.loginName];
|
|
|
- if (c && c[0]) {
|
|
|
- c[0].send(data);
|
|
|
- }
|
|
|
- else{
|
|
|
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', 'OnDisconnected', '{"loginName":"'+param.loginName+'"}', $scope);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.close = function (jsonStr) {
|
|
|
- var c = $scope.peer.connections[param.loginName];
|
|
|
- if (c) {
|
|
|
- c.close();
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.closeAll = function (jsonStr) {
|
|
|
- _.forEach($scope.peer.connections, function (c) {
|
|
|
- c.close();
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- $scope.destroy = function (jsonStr) {
|
|
|
- $scope.peer.destroy();
|
|
|
- };
|
|
|
-}]);
|