123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /**
- * 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', function($scope, $state) {
- lxtalkClient.Invoke('{C62F6059-7741-4AC1-8B8F-97EB5F7C116C}', '_Register', '', $scope);
- var onConnected = function(c){
- c.on('data', function(data) {
- //to do
- });
- c.on('close', function() {
- delete $scope.connectedPeers[c.peer];
- });
- $scope.connectedPeers[c.peer] = 1;
- };
- $scope.init = function(jsonStr){
- var data = JSON.parse(jsonStr);
- // $scope.peer = new Peer(
- // {
- // config:{
- // 'iceServers': [
- // {
- // 'url': 'stun:lqq@59.110.63.164',
- // "credential":"123456"
- // },
- // {
- // "url":"turn:lqq@59.110.63.164",
- // "credential":"123456"
- // }
- // ]},
- // key: data.loginName
- // }
- // );
- // $scope.connectedPeers = {};
- // $scope.peer.on('open', function(id){console.log(id);});
- // $scope.peer.on('connection', onConnected);
- // $scope.peer.on('error', function(err){console.log(err);});
- };
- $scope.connect = function(jsonStr){
- var data = JSON.parse(jsonStr);
- 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);});
- $scope.connectedPeers[data.loginName] = 1;
- }
- };
- $scope.send = function(jsonStr, data){
- // var param = JSON.parse(jsonStr);
- var buf = new Uint8Array(data);
- var str = utf8.bytesToString(buf);//new TextDecoder().decode(uint8array); data.toString('utf8')//String.fromCharCode.apply(null, buf);
-
- console.info(str);
- var blob = new Blob(buf)
- // var c = $scope.peer.connections[param.loginName];
- // if (c){
- // c.send(new Blob(data));
- // }
- var reader = new FileReader();
- reader.readAsText(blob, 'utf-8');
- reader.onload = function (e) {
- console.info(reader.result);
- }
- };
- $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();
- };
- }]);
|