Skip to content

Commit 6a475f2

Browse files
committed
updated tscript, added error cause information to _wsSend.
1 parent 30b2cdf commit 6a475f2

File tree

4 files changed

+62
-16
lines changed

4 files changed

+62
-16
lines changed

lib/client.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,25 @@ var shortid = require('shortid');
1515
ConnectionStatus[ConnectionStatus["Authenticated"] = 3] = "Authenticated";
1616
})(exports.ConnectionStatus || (exports.ConnectionStatus = {}));
1717
var ConnectionStatus = exports.ConnectionStatus;
18+
(function (MessageSendErrorCause) {
19+
MessageSendErrorCause[MessageSendErrorCause["NoAuth"] = 1] = "NoAuth";
20+
MessageSendErrorCause[MessageSendErrorCause["NoAck"] = 2] = "NoAck";
21+
MessageSendErrorCause[MessageSendErrorCause["Serialization"] = 3] = "Serialization";
22+
MessageSendErrorCause[MessageSendErrorCause["Transport"] = 4] = "Transport";
23+
MessageSendErrorCause[MessageSendErrorCause["Promise"] = 5] = "Promise";
24+
})(exports.MessageSendErrorCause || (exports.MessageSendErrorCause = {}));
25+
var MessageSendErrorCause = exports.MessageSendErrorCause;
26+
var MessageSendError = (function (_super) {
27+
__extends(MessageSendError, _super);
28+
function MessageSendError(message, cause, source, data) {
29+
_super.call(this, message);
30+
this.cause = cause;
31+
this.source = source;
32+
this.data = data;
33+
}
34+
return MessageSendError;
35+
})(Error);
36+
exports.MessageSendError = MessageSendError;
1837
var Client = (function (_super) {
1938
__extends(Client, _super);
2039
function Client(_a) {
@@ -157,23 +176,23 @@ var Client = (function (_super) {
157176
var _this = this;
158177
if (timeout === void 0) { timeout = this.timeout; }
159178
if (this.status < ConnectionStatus.Connected) {
160-
return Promise.reject(new Error('Cannot send data across a socket that is not connected.'));
179+
return Promise.reject(new MessageSendError('Cannot send data across a socket that is not connected.', MessageSendErrorCause.NoAuth));
161180
}
162181
var data;
163182
try {
164183
data = JSON.stringify(message);
165184
}
166185
catch (err) {
167186
this.emit('protocol:error', err);
168-
return Promise.reject(err);
187+
return Promise.reject(new MessageSendError('Could not serialize message.', MessageSendErrorCause.Serialization, err, message));
169188
}
189+
this.emit('raw:outgoing', data);
170190
try {
171-
this.emit('raw:outgoing', data);
172191
this._socket.send(data);
173192
}
174193
catch (err) {
175194
this.emit('transport:error', err);
176-
return Promise.reject(err);
195+
return Promise.reject(new MessageSendError('An error occurred in the transport.', MessageSendErrorCause.Transport, err, message));
177196
}
178197
if (message.id) {
179198
var id = message.id;
@@ -182,7 +201,9 @@ var Client = (function (_super) {
182201
id: id,
183202
message: message,
184203
deferred: deferred,
185-
timeout: setTimeout(function () { return deferred.reject(new Error('no ack')); }, timeout)
204+
timeout: setTimeout(function () {
205+
deferred.reject(new MessageSendError('Did not receive acknowledgement in the timeout period.', MessageSendErrorCause.NoAck, void 0, message));
206+
}, timeout)
186207
};
187208
var cleanup = function () {
188209
clearTimeout(pending.timeout);
@@ -193,7 +214,7 @@ var Client = (function (_super) {
193214
return ack;
194215
}, function (err) {
195216
cleanup();
196-
throw err;
217+
throw new MessageSendError('An error occurred during promise resolution', MessageSendErrorCause.Promise, err, message);
197218
});
198219
}
199220
else {

npm-shrinkwrap.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
"karma-chrome-launcher": "^0.2.0",
2020
"karma-jasmine": "^0.3.5",
2121
"karma-typescript-preprocessor": "0.0.19",
22-
"typescript": "^1.5.0-beta"
22+
"typescript": "^1.5.3"
2323
}
2424
}

src/client.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,28 @@ export interface ExtensionAsFunc {
4343
(client: Client): void;
4444
}
4545

46+
export enum MessageSendErrorCause {
47+
NoAuth = 1,
48+
NoAck = 2,
49+
Serialization = 3,
50+
Transport = 4,
51+
Promise = 5
52+
}
53+
54+
export class MessageSendError extends Error {
55+
data: Message;
56+
cause: MessageSendErrorCause;
57+
source: any;
58+
59+
constructor(message: string, cause: MessageSendErrorCause, source?: any, data?: Message) {
60+
super(message);
61+
62+
this.cause = cause;
63+
this.source = source;
64+
this.data = data;
65+
}
66+
}
67+
4668
/**
4769
*/
4870
export class Client extends EventEmitter {
@@ -205,23 +227,24 @@ export class Client extends EventEmitter {
205227

206228
protected _wsSend(message: Message, timeout: number = this.timeout): Promise<Ack> {
207229
if (this.status < ConnectionStatus.Connected) {
208-
return Promise.reject(new Error('Cannot send data across a socket that is not connected.'));
230+
return Promise.reject(new MessageSendError('Cannot send data across a socket that is not connected.', MessageSendErrorCause.NoAuth));
209231
}
210232

211233
var data;
212234
try {
213235
data = JSON.stringify(message);
214236
} catch (err) {
215237
this.emit('protocol:error', err);
216-
return Promise.reject(err);
238+
return Promise.reject(new MessageSendError('Could not serialize message.', MessageSendErrorCause.Serialization, err, message));
217239
}
218240

241+
this.emit('raw:outgoing', data);
242+
219243
try {
220-
this.emit('raw:outgoing', data);
221244
this._socket.send(data);
222245
} catch (err) {
223246
this.emit('transport:error', err);
224-
return Promise.reject(err);
247+
return Promise.reject(new MessageSendError('An error occurred in the transport.', MessageSendErrorCause.Transport, err, message));
225248
}
226249

227250
if (message.id) {
@@ -231,7 +254,9 @@ export class Client extends EventEmitter {
231254
id: id,
232255
message: message,
233256
deferred: deferred,
234-
timeout: setTimeout(() => deferred.reject(new Error('no ack')), timeout)
257+
timeout: setTimeout(() => {
258+
deferred.reject(new MessageSendError('Did not receive acknowledgement in the timeout period.', MessageSendErrorCause.NoAck, void 0, message))
259+
}, timeout)
235260
};
236261
var cleanup = () => {
237262
clearTimeout(pending.timeout);
@@ -242,7 +267,7 @@ export class Client extends EventEmitter {
242267
return ack;
243268
}, (err) => {
244269
cleanup();
245-
throw err;
270+
throw new MessageSendError('An error occurred during promise resolution', MessageSendErrorCause.Promise, err, message);
246271
});
247272
} else {
248273
return Promise.resolve();

0 commit comments

Comments
 (0)