Skip to content

Commit

Permalink
feat(): cookies & transports support
Browse files Browse the repository at this point in the history
closes: #70
closes: #71
closes: #72
closes: #73
closes: #75
closes: #76
closes: #81
  • Loading branch information
triniwiz committed May 29, 2019
1 parent 515d3b2 commit 2c72048
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 3 deletions.
24 changes: 23 additions & 1 deletion src/socketio.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,37 @@ export class SocketIO extends Common {
}
} else if (key === 'debug' && options[key]) {
co.fitcom.fancylogger.FancyLogger.reset(new co.fitcom.fancylogger.FancyLogger());

java.util.logging.Logger.getLogger(io.socket.client.Socket.class.getName()).setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger(io.socket.engineio.client.Socket.class.getName()).setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger(io.socket.client.Manager.class.getName()).setLevel(java.util.logging.Level.FINEST);
} else if (key === 'transports' && options[key]) {
const transports = options[key];
if (Array.isArray(transports) && transports.length > 0) {
opts.transports = transports;
}
} else {
opts[key] = options[key];
}
}
this.socket = io.socket.client.IO.socket(args[0], opts);
this.socket.io().on(io.socket.client.Manager.EVENT_TRANSPORT, new io.socket.emitter.Emitter.Listener({
call(transportArgs) {
let transports = transportArgs[0];
if (transports) {
transports.on(io.socket.engineio.client.Transport.EVENT_REQUEST_HEADERS, new io.socket.emitter.Emitter.Listener({
call(requestArgs) {
const cookies = options['cookie'];
if (cookies) {
const headers = requestArgs[0];
const list = new java.util.ArrayList();
list.add(cookies);
headers.put('Cookie', list);
}
}
}));
}
}
}));
break;
}

Expand Down
18 changes: 17 additions & 1 deletion src/socketio.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,17 @@
export * from './socketio.android';
import { Common } from './socketio.common';
export declare class SocketIO extends Common {
protected socket: any;
constructor(...args: any[]);
connect(): void;
disconnect(): void;
readonly connected: boolean;
on(event: string, callback: (...payload: any[]) => void): () => void;
once(event: string, callback: (...payload: any[]) => void): () => void;
off(event: string): void;
emit(event: string, ...payload: any[]): void;
joinNamespace(nsp: string): SocketIO;
leaveNamespace(): void;
}
export declare function serialize(data: any): any;
export declare function deserialize(data: any): any;
export declare function connect(uri: string, options?: any): SocketIO;
62 changes: 61 additions & 1 deletion src/socketio.ios.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Common } from './socketio.common';

declare var SocketManager: any, NSURLComponents: any, NSURL: any, NSArray: any,
NSDictionary: any, NSNull: any, SocketIOStatus: any;
NSDictionary: any, NSNull: any, SocketIOStatus: any, NSHTTPCookie: any, NSHTTPCookieSecure: any,
NSHTTPCookiePath: any, NSHTTPCookieDomain: any, NSHTTPCookieExpires: any,
NSHTTPCookieMaximumAge: any, NSHTTPCookieName: any, NSHTTPCookieValue: any;

export class SocketIO extends Common {
protected socket: any;
Expand Down Expand Up @@ -62,6 +64,64 @@ export class SocketIO extends Common {
}
} else if (key === 'debug' && obj[key]) {
opts['log'] = true;
} else if (key === 'cookie') {
const cookie = obj[key] as string;
const properties = {};
properties[NSHTTPCookiePath] = '/';
properties[NSHTTPCookieDomain] = (urlComponent.scheme || '') + '://' + (urlComponent.host || '');
cookie.split(';').forEach((item, index) => {
if (item.trim() === 'Secure') {
properties[NSHTTPCookieSecure] = true;
} else if (item.trim() === 'HttpOnly') {

} else {
const keyVal = item.trim();
if (item.indexOf('=') > -1) {
const keyValItems = keyVal.split('=');
const key = keyValItems[0];
const val = keyValItems[1];
if (index === 0) {
properties[NSHTTPCookieName] = key;
properties[NSHTTPCookieValue] = val;
} else {
switch (key) {
case 'path':
case 'Path':
properties[NSHTTPCookiePath] = val;
break;
case 'domain':
case 'Domain':
properties[NSHTTPCookieDomain] = val;
break;
case 'expires':
case 'Expires':
properties[NSHTTPCookieExpires] = val;
break;
case 'max-age':
case 'Max-Age':
properties[NSHTTPCookieMaximumAge] = val;
break;
default:

}
}
}
}
});
const props = NSDictionary.dictionaryWithDictionary(properties);
const native_cookie = NSHTTPCookie.cookieWithProperties(props);
if (native_cookie) {
opts['cookies'] = NSArray.arrayWithObject(native_cookie);
}
} else if (key === 'transports') {
const transports = obj[key];
if (Array.isArray(transports) && transports.length === 1) {
if (transports.indexOf(['websocket']) > -1) {
opts['forceWebsockets'] = true;
} else if (transports.indexOf(['polling']) > -1) {
opts['forcePolling'] = true;
}
}
} else {
opts[key] = serialize(obj[key]);
}
Expand Down

0 comments on commit 2c72048

Please sign in to comment.