{
+ const invocation = {
+ arguments: [42, true, "test", ["x1", "y2"], null],
headers: {},
- type: MessageType.Invocation,
invocationId: "123",
target: "myMethod",
- arguments: [42, true, "test", ["x1", "y2"], null]
- };
+ type: MessageType.Invocation,
+ } as InvocationMessage;
- let protocol = new MessagePackHubProtocol();
- var parsedMessages = protocol.parseMessages(protocol.writeMessage(invocation));
+ const protocol = new MessagePackHubProtocol();
+ const parsedMessages = protocol.parseMessages(protocol.writeMessage(invocation));
expect(parsedMessages).toEqual([invocation]);
});
([
[[0x0c, 0x95, 0x03, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x01, 0xa3, 0x45, 0x72, 0x72],
{
- headers: {},
- type: MessageType.Completion,
- invocationId: "abc",
error: "Err",
- result: null
+ headers: {},
+ invocationId: "abc",
+ result: null,
+ type: MessageType.Completion,
} as CompletionMessage],
[[0x0b, 0x95, 0x03, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x03, 0xa2, 0x4f, 0x4b],
{
- headers: {},
- type: MessageType.Completion,
- invocationId: "abc",
error: null,
- result: "OK"
+ headers: {},
+ invocationId: "abc",
+ result: "OK",
+ type: MessageType.Completion,
} as CompletionMessage],
[[0x08, 0x94, 0x03, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x02],
{
- headers: {},
- type: MessageType.Completion,
- invocationId: "abc",
error: null,
- result: null
- } as CompletionMessage]
- ] as [number[], CompletionMessage][]).forEach(([payload, expected_message]) =>
+ headers: {},
+ invocationId: "abc",
+ result: null,
+ type: MessageType.Completion,
+ } as CompletionMessage],
+ [[0x0E, 0x95, 0x03, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x03, 0xD6, 0xFF, 0x5A, 0x4A, 0x1A, 0x50],
+ {
+ error: null,
+ headers: {},
+ invocationId: "abc",
+ result: new Date(Date.UTC(2018, 0, 1, 11, 24, 0)),
+ type: MessageType.Completion,
+ } as CompletionMessage],
+ ] as Array<[number[], CompletionMessage]>).forEach(([payload, expectedMessage]) =>
it("can read Completion message", () => {
- let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
- expect(messages).toEqual([expected_message]);
+ const messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
+ expect(messages).toEqual([expectedMessage]);
}));
([
[[0x08, 0x94, 0x02, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x08],
{
headers: {},
- type: MessageType.StreamItem,
invocationId: "abc",
- item: 8
+ item: 8,
+ type: MessageType.StreamItem,
+ } as StreamItemMessage],
+ [[0x0D, 0x94, 0x02, 0x80, 0xa3, 0x61, 0x62, 0x63, 0xD6, 0xFF, 0x5A, 0x4A, 0x1A, 0x50],
+ {
+ headers: {},
+ invocationId: "abc",
+ item: new Date(Date.UTC(2018, 0, 1, 11, 24, 0)),
+ type: MessageType.StreamItem,
} as StreamItemMessage]
- ] as [[number[], StreamItemMessage]]).forEach(([payload, expected_message]) =>
+ ] as Array<[number[], StreamItemMessage]>).forEach(([payload, expectedMessage]) =>
it("can read StreamItem message", () => {
- let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
- expect(messages).toEqual([expected_message]);
+ const messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
+ expect(messages).toEqual([expectedMessage]);
}));
([
[[0x0c, 0x94, 0x02, 0x81, 0xa1, 0x74, 0xa1, 0x75, 0xa3, 0x61, 0x62, 0x63, 0x08],
{
headers: {
- "t": "u"
+ t: "u",
},
- type: MessageType.StreamItem,
invocationId: "abc",
- item: 8
- } as StreamItemMessage]
- ] as [[number[], StreamItemMessage]]).forEach(([payload, expected_message]) =>
+ item: 8,
+ type: MessageType.StreamItem,
+ } as StreamItemMessage],
+ ] as Array<[number[], StreamItemMessage]>).forEach(([payload, expectedMessage]) =>
it("can read message with headers", () => {
- let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
- expect(messages).toEqual([expected_message]);
+ const messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
+ expect(messages).toEqual([expectedMessage]);
}));
([
@@ -120,46 +148,46 @@ describe("MessageHubProtocol", () => {
["Completion message with invalid invocation id", [0x04, 0x93, 0x03, 0x80, 0xa0], new Error("Invalid payload for Completion message.")],
["Completion message with unexpected result", [0x06, 0x95, 0x03, 0x80, 0xa0, 0x02, 0x00], new Error("Invalid payload for Completion message.")],
["Completion message with missing result", [0x05, 0x94, 0x03, 0x80, 0xa0, 0x01], new Error("Invalid payload for Completion message.")],
- ["Completion message with missing error", [0x05, 0x94, 0x03, 0x80, 0xa0, 0x03], new Error("Invalid payload for Completion message.")]
- ] as [string, number[], Error][]).forEach(([name, payload, expected_error]) =>
+ ["Completion message with missing error", [0x05, 0x94, 0x03, 0x80, 0xa0, 0x03], new Error("Invalid payload for Completion message.")],
+ ] as Array<[string, number[], Error]>).forEach(([name, payload, expectedError]) =>
it("throws for " + name, () => {
expect(() => new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer))
- .toThrow(expected_error);
+ .toThrow(expectedError);
}));
it("can read multiple messages", () => {
- let payload = [
+ const payload = [
0x08, 0x94, 0x02, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x08,
0x0b, 0x95, 0x03, 0x80, 0xa3, 0x61, 0x62, 0x63, 0x03, 0xa2, 0x4f, 0x4b];
- let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
+ const messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
expect(messages).toEqual([
{
headers: {},
- type: MessageType.StreamItem,
invocationId: "abc",
- item: 8
+ item: 8,
+ type: MessageType.StreamItem,
} as StreamItemMessage,
{
- headers: {},
- type: MessageType.Completion,
- invocationId: "abc",
error: null,
- result: "OK"
- } as CompletionMessage
+ headers: {},
+ invocationId: "abc",
+ result: "OK",
+ type: MessageType.Completion,
+ } as CompletionMessage,
]);
});
it("can read ping message", () => {
- let payload = [
+ const payload = [
0x02,
0x91, // message array length = 1 (fixarray)
0x06, // type = 6 = Ping (fixnum)
];
- let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
+ const messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
expect(messages).toEqual([
{
type: MessageType.Ping,
- }
- ])
- })
-});
\ No newline at end of file
+ },
+ ]);
+ });
+});
diff --git a/client-ts/signalr/package.json b/client-ts/signalr/package.json
index dcb7d731f0..8f1b8bdb02 100644
--- a/client-ts/signalr/package.json
+++ b/client-ts/signalr/package.json
@@ -18,7 +18,7 @@
"build:cjs": "node ../node_modules/typescript/bin/tsc --project ./tsconfig.json --module commonjs --outDir ./dist/cjs --target ES5",
"build:browser": "node ../node_modules/rollup/bin/rollup -c",
"build:uglify": "node ../node_modules/uglify-js/bin/uglifyjs --source-map \"url='signalr.min.js.map',content='./dist/browser/signalr.js.map'\" --comments -o ./dist/browser/signalr.min.js ./dist/browser/signalr.js",
- "pretest": "node ../node_modules/rimraf/bin.js ./spec/obj && tsc --project ./spec/tsconfig.json",
+ "pretest": "node ../node_modules/rimraf/bin.js ./spec/obj && node ../node_modules/typescript/bin/tsc --project ./spec/tsconfig.json",
"test": "node ../node_modules/jasmine/bin/jasmine.js ./spec/obj/spec/**/*.spec.js"
},
"repository": {
diff --git a/client-ts/tsconfig-base.json b/client-ts/tsconfig-base.json
index aba169f200..2122a6c242 100644
--- a/client-ts/tsconfig-base.json
+++ b/client-ts/tsconfig-base.json
@@ -3,6 +3,7 @@
"compilerOptions": {
"module": "es2015",
"target": "es2016",
+ "outDir": "./obj/js",
"sourceMap": true,
"moduleResolution": "node",
"inlineSources": true,
diff --git a/samples/SocketsSample/SocketsSample.csproj b/samples/SocketsSample/SocketsSample.csproj
index 007aa50aa6..e89c7f71c7 100644
--- a/samples/SocketsSample/SocketsSample.csproj
+++ b/samples/SocketsSample/SocketsSample.csproj
@@ -7,6 +7,7 @@
+
@@ -29,7 +30,12 @@
-
+
+
+
+
+
+
diff --git a/samples/SocketsSample/Startup.cs b/samples/SocketsSample/Startup.cs
index 9c3af3050f..e15502d52d 100644
--- a/samples/SocketsSample/Startup.cs
+++ b/samples/SocketsSample/Startup.cs
@@ -5,9 +5,10 @@ using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
-using Newtonsoft.Json.Serialization;
+using MsgPack.Serialization;
using SocketsSample.EndPoints;
using SocketsSample.Hubs;
+using StackExchange.Redis;
namespace SocketsSample
{
@@ -23,6 +24,10 @@ namespace SocketsSample
{
// Faster pings for testing
options.KeepAliveInterval = TimeSpan.FromSeconds(5);
+ })
+ .AddMessagePackProtocol(options =>
+ {
+ options.SerializationContext.DictionarySerlaizationOptions.KeyTransformer = DictionaryKeyTransformers.LowerCamel;
});
// .AddRedis();
diff --git a/samples/SocketsSample/wwwroot/hubs.html b/samples/SocketsSample/wwwroot/hubs.html
index 2214671c8a..99002d3f48 100644
--- a/samples/SocketsSample/wwwroot/hubs.html
+++ b/samples/SocketsSample/wwwroot/hubs.html
@@ -1,4 +1,4 @@
-
+
@@ -7,11 +7,23 @@
-
+ SignalR Hubs Sample
-