Fixed cordova js bridge implementation, fixed iOS open timeout

This commit is contained in:
kitolog 2018-03-27 11:14:43 +03:00
parent ebe8bc7bd3
commit 26a14948e3
6 changed files with 217 additions and 206 deletions

View File

@ -158,5 +158,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
## What's new ## What's new
1.2.3 - fixed ios socket closing crashes 1.2.3 - fixed iOS socket closing crashes
1.5.0 - added ios open and write timeouts, changed js errors format 1.5.0 - added iOS and Android open and write timeouts, changed js errors format
1.5.1 - fixed cordova js bridge implementation
1.5.2 - fixed iOS open timeout

View File

@ -1,6 +1,6 @@
{ {
"name": "cordova-plugin-socket-tcp", "name": "cordova-plugin-socket-tcp",
"version": "1.5.0", "version": "1.5.2",
"description": "This Cordova plugin provides JavaScript API, that allows you to communicate with server through TCP protocol. Currently we support these platforms: iOS, Android, WP8.", "description": "This Cordova plugin provides JavaScript API, that allows you to communicate with server through TCP protocol. Currently we support these platforms: iOS, Android, WP8.",
"cordova": { "cordova": {
"platforms": [ "platforms": [

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="cordova-plugin-socket-tcp" version="1.5.0"> <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="cordova-plugin-socket-tcp" version="1.5.2">
<name>SocketsForCordova</name> <name>SocketsForCordova</name>
<description> <description>
This Cordova plugin provides JavaScript API, that allows you to communicate with server through TCP protocol. This Cordova plugin provides JavaScript API, that allows you to communicate with server through TCP protocol.
@ -49,7 +49,6 @@
<!--<framework src="CoreGraphics.framework" />--> <!--<framework src="CoreGraphics.framework" />-->
</platform> </platform>
<!-- wp8 --> <!-- wp8 -->
<platform name="wp8"> <platform name="wp8">
<config-file target="config.xml" parent="/*"> <config-file target="config.xml" parent="/*">
@ -65,7 +64,4 @@
<source-file src="src/wp8/src/SocketEvent.cs" target-dir="src" /> <source-file src="src/wp8/src/SocketEvent.cs" target-dir="src" />
<source-file src="src/wp8/src/SocketStorage.cs" target-dir="src" /> <source-file src="src/wp8/src/SocketStorage.cs" target-dir="src" />
</platform> </platform>
</plugin> </plugin>

132
socket.js
View File

@ -1,5 +1,4 @@
cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, module) { /**
/**
* Copyright (c) 2015, Blocshop s.r.o. * Copyright (c) 2015, Blocshop s.r.o.
* All rights reserved. * All rights reserved.
* *
@ -17,34 +16,36 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
*/ */
var exec = require('cordova/exec'); var exec = require('cordova/exec');
var SOCKET_EVENT = "SOCKET_EVENT"; var SOCKET_EVENT = "SOCKET_EVENT";
var CORDOVA_SERVICE_NAME = "SocketsForCordova"; var CORDOVA_SERVICE_NAME = "SocketsForCordova";
Socket.State = {}; Socket.State = {};
Socket.State[Socket.State.CLOSED = 0] = "CLOSED"; Socket.State[Socket.State.CLOSED = 0] = "CLOSED";
Socket.State[Socket.State.OPENING = 1] = "OPENING"; Socket.State[Socket.State.OPENING = 1] = "OPENING";
Socket.State[Socket.State.OPENED = 2] = "OPENED"; Socket.State[Socket.State.OPENED = 2] = "OPENED";
Socket.State[Socket.State.CLOSING = 3] = "CLOSING"; Socket.State[Socket.State.CLOSING = 3] = "CLOSING";
Socket.ErrorType = {}; Socket.ErrorType = {};
Socket.ErrorType[Socket.ErrorType.GENERAL = 0] = "general"; Socket.ErrorType[Socket.ErrorType.GENERAL = 0] = "general";
Socket.ErrorType[Socket.ErrorType.OPEN_TIMEOUT = 1] = "openTimeout"; Socket.ErrorType[Socket.ErrorType.OPEN_TIMEOUT = 1] = "openTimeout";
Socket.ErrorType[Socket.ErrorType.WRITE_TIMEOUT = 2] = "writeTimeout"; Socket.ErrorType[Socket.ErrorType.WRITE_TIMEOUT = 2] = "writeTimeout";
function Socket() { function Socket() {
this._state = Socket.State.CLOSED; this._state = Socket.State.CLOSED;
this.onData = null; this.onData = null;
this.onClose = null; this.onClose = null;
this.onError = null; this.onError = null;
this.socketKey = guid(); this.socketKey = guid();
} }
Socket.prototype.open = function (host, port, success, error) { Socket.prototype.open = function (host, port, success, error) {
success = success || function() { }; success = success || function () {
error = error || function() { }; };
error = error || function () {
};
if (!this._ensureState(Socket.State.CLOSED, error)) { if (!this._ensureState(Socket.State.CLOSED, error)) {
return; return;
@ -86,19 +87,25 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
window.document.addEventListener(SOCKET_EVENT, socketEventHandler); window.document.addEventListener(SOCKET_EVENT, socketEventHandler);
success(); success();
}, },
function(errorMessage) { function (errorMessage) {
_that._state = Socket.State.CLOSED; _that._state = Socket.State.CLOSED;
error(errorMessage); error(errorMessage);
}, },
CORDOVA_SERVICE_NAME, CORDOVA_SERVICE_NAME,
"open", "open",
[ this.socketKey, host, port ]); [
this.socketKey,
host,
port
]);
};
Socket.prototype.write = function (data, success, error) {
success = success || function () {
};
error = error || function () {
}; };
Socket.prototype.write = function (data, success, error) {
success = success || function() { };
error = error || function() { };
if (!this._ensureState(Socket.State.OPENED, error)) { if (!this._ensureState(Socket.State.OPENED, error)) {
return; return;
@ -113,13 +120,18 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error, error,
CORDOVA_SERVICE_NAME, CORDOVA_SERVICE_NAME,
"write", "write",
[ this.socketKey, dataToWrite ]); [
this.socketKey,
dataToWrite
]);
};
Socket.prototype.shutdownWrite = function (success, error) {
success = success || function () {
};
error = error || function () {
}; };
Socket.prototype.shutdownWrite = function (success, error) {
success = success || function() { };
error = error || function() { };
if (!this._ensureState(Socket.State.OPENED, error)) { if (!this._ensureState(Socket.State.OPENED, error)) {
return; return;
@ -130,13 +142,15 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error, error,
CORDOVA_SERVICE_NAME, CORDOVA_SERVICE_NAME,
"shutdownWrite", "shutdownWrite",
[ this.socketKey ]); [this.socketKey]);
};
Socket.prototype.close = function (success, error) {
success = success || function () {
};
error = error || function () {
}; };
Socket.prototype.close = function (success, error) {
success = success || function() { };
error = error || function() { };
if (!this._ensureState(Socket.State.OPENED, error)) { if (!this._ensureState(Socket.State.OPENED, error)) {
return; return;
@ -149,21 +163,21 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error, error,
CORDOVA_SERVICE_NAME, CORDOVA_SERVICE_NAME,
"close", "close",
[ this.socketKey ]); [this.socketKey]);
}; };
Object.defineProperty(Socket.prototype, "state", { Object.defineProperty(Socket.prototype, "state", {
get: function () { get : function () {
return this._state; return this._state;
}, },
enumerable: true, enumerable : true,
configurable: true configurable : true
}); });
Socket.prototype._ensureState = function(requiredState, errorCallback) { Socket.prototype._ensureState = function (requiredState, errorCallback) {
var state = this._state; var state = this._state;
if (state != requiredState) { if (state != requiredState) {
window.setTimeout(function() { window.setTimeout(function () {
errorCallback("Invalid operation for this socket state: " + Socket.State[state]); errorCallback("Invalid operation for this socket state: " + Socket.State[state]);
}); });
return false; return false;
@ -171,25 +185,25 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
else { else {
return true; return true;
} }
}; };
Socket.dispatchEvent = function (event) { Socket.dispatchEvent = function (event) {
var eventReceive = document.createEvent('Events'); var eventReceive = document.createEvent('Events');
eventReceive.initEvent(SOCKET_EVENT, true, true); eventReceive.initEvent(SOCKET_EVENT, true, true);
eventReceive.payload = event; eventReceive.payload = event;
document.dispatchEvent(eventReceive); document.dispatchEvent(eventReceive);
}; };
Socket._copyToArray = function (array) { Socket._copyToArray = function (array) {
var outputArray = new Array(array.length); var outputArray = new Array(array.length);
for (var i = 0; i < array.length; i++) { for (var i = 0; i < array.length; i++) {
outputArray[i] = array[i]; outputArray[i] = array[i];
} }
return outputArray; return outputArray;
}; };
var guid = (function () { var guid = (function () {
function s4() { function s4() {
return Math.floor((1 + Math.random()) * 0x10000) return Math.floor((1 + Math.random()) * 0x10000)
.toString(16) .toString(16)
@ -200,10 +214,10 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4(); s4() + '-' + s4() + s4() + s4();
}; };
})(); })();
// Register event dispatcher for Windows Phone // Register event dispatcher for Windows Phone
if (navigator.userAgent.match(/iemobile/i)) { if (navigator.userAgent.match(/iemobile/i)) {
window.document.addEventListener("deviceready", function () { window.document.addEventListener("deviceready", function () {
exec( exec(
Socket.dispatchEvent, Socket.dispatchEvent,
@ -212,10 +226,8 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
}, },
CORDOVA_SERVICE_NAME, CORDOVA_SERVICE_NAME,
"registerWPEventDispatcher", "registerWPEventDispatcher",
[ ]); []);
}); });
} }
module.exports = Socket; module.exports = Socket;
});

BIN
src/ios/.DS_Store vendored

Binary file not shown.

View File

@ -77,7 +77,8 @@ int writeTimeoutSeconds = 5.0;
-(void)onOpenTimeout:(NSTimer *)timer { -(void)onOpenTimeout:(NSTimer *)timer {
NSLog(@"[NATIVE] Open timeout: %d", openTimeoutSeconds); NSLog(@"[NATIVE] Open timeout: %d", openTimeoutSeconds);
self.errorEventHandler(@"Socket open timeout", @"openTimeout"); //self.errorEventHandler(@"Socket open timeout", @"openTimeout");
self.openErrorEventHandler(@"Socket open timeout");
openTimer = nil; openTimer = nil;
} }