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.
## What's new
1.2.3 - fixed ios socket closing crashes
1.5.0 - added ios open and write timeouts, changed js errors format
1.2.3 - fixed iOS socket closing crashes
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",
"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.",
"cordova": {
"platforms": [

View File

@ -1,6 +1,6 @@
<?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>
<description>
This Cordova plugin provides JavaScript API, that allows you to communicate with server through TCP protocol.
@ -49,7 +49,6 @@
<!--<framework src="CoreGraphics.framework" />-->
</platform>
<!-- wp8 -->
<platform name="wp8">
<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/SocketStorage.cs" target-dir="src" />
</platform>
</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.
* 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 CORDOVA_SERVICE_NAME = "SocketsForCordova";
var SOCKET_EVENT = "SOCKET_EVENT";
var CORDOVA_SERVICE_NAME = "SocketsForCordova";
Socket.State = {};
Socket.State[Socket.State.CLOSED = 0] = "CLOSED";
Socket.State[Socket.State.OPENING = 1] = "OPENING";
Socket.State[Socket.State.OPENED = 2] = "OPENED";
Socket.State[Socket.State.CLOSING = 3] = "CLOSING";
Socket.State = {};
Socket.State[Socket.State.CLOSED = 0] = "CLOSED";
Socket.State[Socket.State.OPENING = 1] = "OPENING";
Socket.State[Socket.State.OPENED = 2] = "OPENED";
Socket.State[Socket.State.CLOSING = 3] = "CLOSING";
Socket.ErrorType = {};
Socket.ErrorType[Socket.ErrorType.GENERAL = 0] = "general";
Socket.ErrorType[Socket.ErrorType.OPEN_TIMEOUT = 1] = "openTimeout";
Socket.ErrorType[Socket.ErrorType.WRITE_TIMEOUT = 2] = "writeTimeout";
Socket.ErrorType = {};
Socket.ErrorType[Socket.ErrorType.GENERAL = 0] = "general";
Socket.ErrorType[Socket.ErrorType.OPEN_TIMEOUT = 1] = "openTimeout";
Socket.ErrorType[Socket.ErrorType.WRITE_TIMEOUT = 2] = "writeTimeout";
function Socket() {
function Socket() {
this._state = Socket.State.CLOSED;
this.onData = null;
this.onClose = null;
this.onError = null;
this.socketKey = guid();
}
}
Socket.prototype.open = function (host, port, success, error) {
Socket.prototype.open = function (host, port, success, error) {
success = success || function() { };
error = error || function() { };
success = success || function () {
};
error = error || function () {
};
if (!this._ensureState(Socket.State.CLOSED, error)) {
return;
@ -86,19 +87,25 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
window.document.addEventListener(SOCKET_EVENT, socketEventHandler);
success();
},
function(errorMessage) {
function (errorMessage) {
_that._state = Socket.State.CLOSED;
error(errorMessage);
},
CORDOVA_SERVICE_NAME,
"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)) {
return;
@ -113,13 +120,18 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error,
CORDOVA_SERVICE_NAME,
"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)) {
return;
@ -130,13 +142,15 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error,
CORDOVA_SERVICE_NAME,
"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)) {
return;
@ -149,21 +163,21 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
error,
CORDOVA_SERVICE_NAME,
"close",
[ this.socketKey ]);
};
[this.socketKey]);
};
Object.defineProperty(Socket.prototype, "state", {
get: function () {
Object.defineProperty(Socket.prototype, "state", {
get : function () {
return this._state;
},
enumerable: true,
configurable: true
});
enumerable : true,
configurable : true
});
Socket.prototype._ensureState = function(requiredState, errorCallback) {
Socket.prototype._ensureState = function (requiredState, errorCallback) {
var state = this._state;
if (state != requiredState) {
window.setTimeout(function() {
window.setTimeout(function () {
errorCallback("Invalid operation for this socket state: " + Socket.State[state]);
});
return false;
@ -171,25 +185,25 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
else {
return true;
}
};
};
Socket.dispatchEvent = function (event) {
Socket.dispatchEvent = function (event) {
var eventReceive = document.createEvent('Events');
eventReceive.initEvent(SOCKET_EVENT, true, true);
eventReceive.payload = event;
document.dispatchEvent(eventReceive);
};
};
Socket._copyToArray = function (array) {
Socket._copyToArray = function (array) {
var outputArray = new Array(array.length);
for (var i = 0; i < array.length; i++) {
outputArray[i] = array[i];
}
return outputArray;
};
};
var guid = (function () {
var guid = (function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
@ -200,10 +214,10 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
};
})();
})();
// Register event dispatcher for Windows Phone
if (navigator.userAgent.match(/iemobile/i)) {
if (navigator.userAgent.match(/iemobile/i)) {
window.document.addEventListener("deviceready", function () {
exec(
Socket.dispatchEvent,
@ -212,10 +226,8 @@ cordova.define("cordova-plugin-socket-tcp.Socket", function(require, exports, mo
},
CORDOVA_SERVICE_NAME,
"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 {
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;
}