Skip to content

Instantly share code, notes, and snippets.

@darkl

darkl/parser.js Secret

Last active December 15, 2019 20:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darkl/7476a72da0d38c1044f46d56a3b6d68a to your computer and use it in GitHub Desktop.
Save darkl/7476a72da0d38c1044f46d56a3b6d68a to your computer and use it in GitHub Desktop.
WAMP parser
var WampMessageType;
(function (WampMessageType) {
WampMessageType[WampMessageType["Hello"] = 1] = "Hello";
WampMessageType[WampMessageType["Welcome"] = 2] = "Welcome";
WampMessageType[WampMessageType["Abort"] = 3] = "Abort";
WampMessageType[WampMessageType["Challenge"] = 4] = "Challenge";
WampMessageType[WampMessageType["Authenticate"] = 5] = "Authenticate";
WampMessageType[WampMessageType["Goodbye"] = 6] = "Goodbye";
WampMessageType[WampMessageType["Error"] = 8] = "Error";
WampMessageType[WampMessageType["Publish"] = 16] = "Publish";
WampMessageType[WampMessageType["Published"] = 17] = "Published";
WampMessageType[WampMessageType["Subscribe"] = 32] = "Subscribe";
WampMessageType[WampMessageType["Subscribed"] = 33] = "Subscribed";
WampMessageType[WampMessageType["Unsubscribe"] = 34] = "Unsubscribe";
WampMessageType[WampMessageType["Unsubscribed"] = 35] = "Unsubscribed";
WampMessageType[WampMessageType["Event"] = 36] = "Event";
WampMessageType[WampMessageType["Call"] = 48] = "Call";
WampMessageType[WampMessageType["Cancel"] = 49] = "Cancel";
WampMessageType[WampMessageType["Result"] = 50] = "Result";
WampMessageType[WampMessageType["Register"] = 64] = "Register";
WampMessageType[WampMessageType["Registered"] = 65] = "Registered";
WampMessageType[WampMessageType["Unregister"] = 66] = "Unregister";
WampMessageType[WampMessageType["Unregistered"] = 67] = "Unregistered";
WampMessageType[WampMessageType["Invocation"] = 68] = "Invocation";
WampMessageType[WampMessageType["Interrupt"] = 69] = "Interrupt";
WampMessageType[WampMessageType["Yield"] = 70] = "Yield";
})(WampMessageType || (WampMessageType = {}));
function parseWampMessage(messageArray) {
var messageType;
var arguments;
[messageType, ...arguments] = messageArray;
switch (messageType) {
case WampMessageType.Hello:
return new HelloMessage(arguments);
case WampMessageType.Welcome:
return new WelcomeMessage(arguments);
case WampMessageType.Abort:
return new AbortMessage(arguments);
case WampMessageType.Challenge:
return new ChallengeMessage(arguments);
case WampMessageType.Authenticate:
return new AuthenticateMessage(arguments);
case WampMessageType.Goodbye:
return new GoodbyeMessage(arguments);
case WampMessageType.Error:
return new ErrorMessage(arguments);
case WampMessageType.Publish:
return new PublishMessage(arguments);
case WampMessageType.Published:
return new PublishedMessage(arguments);
case WampMessageType.Subscribe:
return new SubscribeMessage(arguments);
case WampMessageType.Subscribed:
return new SubscribedMessage(arguments);
case WampMessageType.Unsubscribe:
return new UnsubscribeMessage(arguments);
case WampMessageType.Unsubscribed:
return new UnsubscribedMessage(arguments);
case WampMessageType.Event:
return new EventMessage(arguments);
case WampMessageType.Call:
return new CallMessage(arguments);
case WampMessageType.Cancel:
return new CancelMessage(arguments);
case WampMessageType.Result:
return new ResultMessage(arguments);
case WampMessageType.Register:
return new RegisterMessage(arguments);
case WampMessageType.Registered:
return new RegisteredMessage(arguments);
case WampMessageType.Unregister:
return new UnregisterMessage(arguments);
case WampMessageType.Unregistered:
return new UnregisteredMessage(arguments);
case WampMessageType.Invocation:
return new InvocationMessage(arguments);
case WampMessageType.Interrupt:
return new InterruptMessage(arguments);
case WampMessageType.Yield:
return new YieldMessage(arguments);
default:
return null;
}
}
class HelloMessage {
constructor(messageArguments) {
[this._realm, this._details] = messageArguments;
}
get messageCode() { return WampMessageType.Hello; }
get messageName() { return "HELLO"; }
get realm() { return this._realm; }
get details() { return this._details; }
}
class WelcomeMessage {
constructor(messageArguments) {
[this._session, this._details] = messageArguments;
}
get messageCode() { return WampMessageType.Welcome; }
get messageName() { return "WELCOME"; }
get session() { return this._session; }
get details() { return this._details; }
}
class AbortMessage {
constructor(messageArguments) {
[this._details, this._reason] = messageArguments;
}
get messageCode() { return WampMessageType.Abort; }
get messageName() { return "ABORT"; }
get details() { return this._details; }
get reason() { return this._reason; }
}
class ChallengeMessage {
constructor(messageArguments) {
[this._authMethod, this._extra] = messageArguments;
}
get messageCode() { return WampMessageType.Challenge; }
get messageName() { return "CHALLENGE"; }
get authMethod() { return this._authMethod; }
get extra() { return this._extra; }
}
class AuthenticateMessage {
constructor(messageArguments) {
[this._signature, this._extra] = messageArguments;
}
get messageCode() { return WampMessageType.Authenticate; }
get messageName() { return "AUTHENTICATE"; }
get signature() { return this._signature; }
get extra() { return this._extra; }
}
class GoodbyeMessage {
constructor(messageArguments) {
[this._details, this._reason] = messageArguments;
}
get messageCode() { return WampMessageType.Goodbye; }
get messageName() { return "GOODBYE"; }
get details() { return this._details; }
get reason() { return this._reason; }
}
class ErrorMessage {
constructor(messageArguments) {
[this._type, this._request, this._details, this._error, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Error; }
get messageName() { return "ERROR"; }
get type() { return this._type; }
get request() { return this._request; }
get details() { return this._details; }
get error() { return this._error; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class PublishMessage {
constructor(messageArguments) {
[this._request, this._options, this._topic, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Publish; }
get messageName() { return "PUBLISH"; }
get request() { return this._request; }
get options() { return this._options; }
get topic() { return this._topic; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class PublishedMessage {
constructor(messageArguments) {
[this._request, this._publication] = messageArguments;
}
get messageCode() { return WampMessageType.Published; }
get messageName() { return "PUBLISHED"; }
get request() { return this._request; }
get publication() { return this._publication; }
}
class SubscribeMessage {
constructor(messageArguments) {
[this._request, this._options, this._topic] = messageArguments;
}
get messageCode() { return WampMessageType.Subscribe; }
get messageName() { return "SUBSCRIBE"; }
get request() { return this._request; }
get options() { return this._options; }
get topic() { return this._topic; }
}
class SubscribedMessage {
constructor(messageArguments) {
[this._request, this._subscription] = messageArguments;
}
get messageCode() { return WampMessageType.Subscribed; }
get messageName() { return "SUBSCRIBED"; }
get request() { return this._request; }
get subscription() { return this._subscription; }
}
class UnsubscribeMessage {
constructor(messageArguments) {
[this._request, this._subscription] = messageArguments;
}
get messageCode() { return WampMessageType.Unsubscribe; }
get messageName() { return "UNSUBSCRIBE"; }
get request() { return this._request; }
get subscription() { return this._subscription; }
}
class UnsubscribedMessage {
constructor(messageArguments) {
[this._request] = messageArguments;
}
get messageCode() { return WampMessageType.Unsubscribed; }
get messageName() { return "UNSUBSCRIBED"; }
get request() { return this._request; }
}
class EventMessage {
constructor(messageArguments) {
[this._subscription, this._publication, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Event; }
get messageName() { return "EVENT"; }
get subscription() { return this._subscription; }
get publication() { return this._publication; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class CallMessage {
constructor(messageArguments) {
[this._request, this._options, this._procedure, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Call; }
get messageName() { return "CALL"; }
get request() { return this._request; }
get options() { return this._options; }
get procedure() { return this._procedure; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class CancelMessage {
constructor(messageArguments) {
[this._request, this._options] = messageArguments;
}
get messageCode() { return WampMessageType.Cancel; }
get messageName() { return "CANCEL"; }
get request() { return this._request; }
get options() { return this._options; }
}
class ResultMessage {
constructor(messageArguments) {
[this._request, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Result; }
get messageName() { return "RESULT"; }
get request() { return this._request; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class RegisterMessage {
constructor(messageArguments) {
[this._request, this._options, this._procedure] = messageArguments;
}
get messageCode() { return WampMessageType.Register; }
get messageName() { return "REGISTER"; }
get request() { return this._request; }
get options() { return this._options; }
get procedure() { return this._procedure; }
}
class RegisteredMessage {
constructor(messageArguments) {
[this._request, this._registration] = messageArguments;
}
get messageCode() { return WampMessageType.Registered; }
get messageName() { return "REGISTERED"; }
get request() { return this._request; }
get registration() { return this._registration; }
}
class UnregisterMessage {
constructor(messageArguments) {
[this._request, this._registration] = messageArguments;
}
get messageCode() { return WampMessageType.Unregister; }
get messageName() { return "UNREGISTER"; }
get request() { return this._request; }
get registration() { return this._registration; }
}
class UnregisteredMessage {
constructor(messageArguments) {
[this._request] = messageArguments;
}
get messageCode() { return WampMessageType.Unregistered; }
get messageName() { return "UNREGISTERED"; }
get request() { return this._request; }
}
class InvocationMessage {
constructor(messageArguments) {
[this._request, this._registration, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Invocation; }
get messageName() { return "INVOCATION"; }
get request() { return this._request; }
get registration() { return this._registration; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class InterruptMessage {
constructor(messageArguments) {
[this._request, this._options] = messageArguments;
}
get messageCode() { return WampMessageType.Interrupt; }
get messageName() { return "INTERRUPT"; }
get request() { return this._request; }
get options() { return this._options; }
}
class YieldMessage {
constructor(messageArguments) {
[this._request, this._options, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Yield; }
get messageName() { return "YIELD"; }
get request() { return this._request; }
get options() { return this._options; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
enum WampMessageType {
Hello = 1,
Welcome = 2,
Abort = 3,
Challenge = 4,
Authenticate = 5,
Goodbye = 6,
Error = 8,
Publish = 16,
Published = 17,
Subscribe = 32,
Subscribed = 33,
Unsubscribe = 34,
Unsubscribed = 35,
Event = 36,
Call = 48,
Cancel = 49,
Result = 50,
Register = 64,
Registered = 65,
Unregister = 66,
Unregistered = 67,
Invocation = 68,
Interrupt = 69,
Yield = 70
}
function parseWampMessage(messageArray: any[]): IWampMessage {
var messageType : WampMessageType;
var arguments: any[];
[messageType, ... arguments] = messageArray;
switch (messageType) {
case WampMessageType.Hello:
return new HelloMessage(arguments);
case WampMessageType.Welcome:
return new WelcomeMessage(arguments);
case WampMessageType.Abort:
return new AbortMessage(arguments);
case WampMessageType.Challenge:
return new ChallengeMessage(arguments);
case WampMessageType.Authenticate:
return new AuthenticateMessage(arguments);
case WampMessageType.Goodbye:
return new GoodbyeMessage(arguments);
case WampMessageType.Error:
return new ErrorMessage(arguments);
case WampMessageType.Publish:
return new PublishMessage(arguments);
case WampMessageType.Published:
return new PublishedMessage(arguments);
case WampMessageType.Subscribe:
return new SubscribeMessage(arguments);
case WampMessageType.Subscribed:
return new SubscribedMessage(arguments);
case WampMessageType.Unsubscribe:
return new UnsubscribeMessage(arguments);
case WampMessageType.Unsubscribed:
return new UnsubscribedMessage(arguments);
case WampMessageType.Event:
return new EventMessage(arguments);
case WampMessageType.Call:
return new CallMessage(arguments);
case WampMessageType.Cancel:
return new CancelMessage(arguments);
case WampMessageType.Result:
return new ResultMessage(arguments);
case WampMessageType.Register:
return new RegisterMessage(arguments);
case WampMessageType.Registered:
return new RegisteredMessage(arguments);
case WampMessageType.Unregister:
return new UnregisterMessage(arguments);
case WampMessageType.Unregistered:
return new UnregisteredMessage(arguments);
case WampMessageType.Invocation:
return new InvocationMessage(arguments);
case WampMessageType.Interrupt:
return new InterruptMessage(arguments);
case WampMessageType.Yield:
return new YieldMessage(arguments);
default:
return null;
}
}
interface IWampMessage {
messageCode : WampMessageType;
messageName : string;
}
class HelloMessage {
private _realm;
private _details;
constructor(messageArguments: any[]) {
[this._realm, this._details] = messageArguments;
}
get messageCode() { return WampMessageType.Hello; }
get messageName() { return "HELLO"; }
get realm() { return this._realm; }
get details() { return this._details; }
}
class WelcomeMessage {
private _session;
private _details;
constructor(messageArguments: any[]) {
[this._session, this._details] = messageArguments;
}
get messageCode() { return WampMessageType.Welcome; }
get messageName() { return "WELCOME"; }
get session() { return this._session; }
get details() { return this._details; }
}
class AbortMessage {
private _details;
private _reason;
constructor(messageArguments: any[]) {
[this._details, this._reason] = messageArguments;
}
get messageCode() { return WampMessageType.Abort; }
get messageName() { return "ABORT"; }
get details() { return this._details; }
get reason() { return this._reason; }
}
class ChallengeMessage {
private _authMethod;
private _extra;
constructor(messageArguments: any[]) {
[this._authMethod, this._extra] = messageArguments;
}
get messageCode() { return WampMessageType.Challenge; }
get messageName() { return "CHALLENGE"; }
get authMethod() { return this._authMethod; }
get extra() { return this._extra; }
}
class AuthenticateMessage {
private _signature;
private _extra;
constructor(messageArguments: any[]) {
[this._signature, this._extra] = messageArguments;
}
get messageCode() { return WampMessageType.Authenticate; }
get messageName() { return "AUTHENTICATE"; }
get signature() { return this._signature; }
get extra() { return this._extra; }
}
class GoodbyeMessage {
private _details;
private _reason;
constructor(messageArguments: any[]) {
[this._details, this._reason] = messageArguments;
}
get messageCode() { return WampMessageType.Goodbye; }
get messageName() { return "GOODBYE"; }
get details() { return this._details; }
get reason() { return this._reason; }
}
class ErrorMessage {
private _type;
private _request;
private _details;
private _error;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._type, this._request, this._details, this._error, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Error; }
get messageName() { return "ERROR"; }
get type() { return this._type; }
get request() { return this._request; }
get details() { return this._details; }
get error() { return this._error; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class PublishMessage {
private _request;
private _options;
private _topic;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._request, this._options, this._topic, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Publish; }
get messageName() { return "PUBLISH"; }
get request() { return this._request; }
get options() { return this._options; }
get topic() { return this._topic; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class PublishedMessage {
private _request;
private _publication;
constructor(messageArguments: any[]) {
[this._request, this._publication] = messageArguments;
}
get messageCode() { return WampMessageType.Published; }
get messageName() { return "PUBLISHED"; }
get request() { return this._request; }
get publication() { return this._publication; }
}
class SubscribeMessage {
private _request;
private _options;
private _topic;
constructor(messageArguments: any[]) {
[this._request, this._options, this._topic] = messageArguments;
}
get messageCode() { return WampMessageType.Subscribe; }
get messageName() { return "SUBSCRIBE"; }
get request() { return this._request; }
get options() { return this._options; }
get topic() { return this._topic; }
}
class SubscribedMessage {
private _request;
private _subscription;
constructor(messageArguments: any[]) {
[this._request, this._subscription] = messageArguments;
}
get messageCode() { return WampMessageType.Subscribed; }
get messageName() { return "SUBSCRIBED"; }
get request() { return this._request; }
get subscription() { return this._subscription; }
}
class UnsubscribeMessage {
private _request;
private _subscription;
constructor(messageArguments: any[]) {
[this._request, this._subscription] = messageArguments;
}
get messageCode() { return WampMessageType.Unsubscribe; }
get messageName() { return "UNSUBSCRIBE"; }
get request() { return this._request; }
get subscription() { return this._subscription; }
}
class UnsubscribedMessage {
private _request;
constructor(messageArguments: any[]) {
[this._request] = messageArguments;
}
get messageCode() { return WampMessageType.Unsubscribed; }
get messageName() { return "UNSUBSCRIBED"; }
get request() { return this._request; }
}
class EventMessage {
private _subscription;
private _publication;
private _details;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._subscription, this._publication, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Event; }
get messageName() { return "EVENT"; }
get subscription() { return this._subscription; }
get publication() { return this._publication; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class CallMessage {
private _request;
private _options;
private _procedure;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._request, this._options, this._procedure, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Call; }
get messageName() { return "CALL"; }
get request() { return this._request; }
get options() { return this._options; }
get procedure() { return this._procedure; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class CancelMessage {
private _request;
private _options;
constructor(messageArguments: any[]) {
[this._request, this._options] = messageArguments;
}
get messageCode() { return WampMessageType.Cancel; }
get messageName() { return "CANCEL"; }
get request() { return this._request; }
get options() { return this._options; }
}
class ResultMessage {
private _request;
private _details;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._request, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Result; }
get messageName() { return "RESULT"; }
get request() { return this._request; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class RegisterMessage {
private _request;
private _options;
private _procedure;
constructor(messageArguments: any[]) {
[this._request, this._options, this._procedure] = messageArguments;
}
get messageCode() { return WampMessageType.Register; }
get messageName() { return "REGISTER"; }
get request() { return this._request; }
get options() { return this._options; }
get procedure() { return this._procedure; }
}
class RegisteredMessage {
private _request;
private _registration;
constructor(messageArguments: any[]) {
[this._request, this._registration] = messageArguments;
}
get messageCode() { return WampMessageType.Registered; }
get messageName() { return "REGISTERED"; }
get request() { return this._request; }
get registration() { return this._registration; }
}
class UnregisterMessage {
private _request;
private _registration;
constructor(messageArguments: any[]) {
[this._request, this._registration] = messageArguments;
}
get messageCode() { return WampMessageType.Unregister; }
get messageName() { return "UNREGISTER"; }
get request() { return this._request; }
get registration() { return this._registration; }
}
class UnregisteredMessage {
private _request;
constructor(messageArguments: any[]) {
[this._request] = messageArguments;
}
get messageCode() { return WampMessageType.Unregistered; }
get messageName() { return "UNREGISTERED"; }
get request() { return this._request; }
}
class InvocationMessage {
private _request;
private _registration;
private _details;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._request, this._registration, this._details, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Invocation; }
get messageName() { return "INVOCATION"; }
get request() { return this._request; }
get registration() { return this._registration; }
get details() { return this._details; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
class InterruptMessage {
private _request;
private _options;
constructor(messageArguments: any[]) {
[this._request, this._options] = messageArguments;
}
get messageCode() { return WampMessageType.Interrupt; }
get messageName() { return "INTERRUPT"; }
get request() { return this._request; }
get options() { return this._options; }
}
class YieldMessage {
private _request;
private _options;
private _arguments;
private _argumentsKw;
constructor(messageArguments: any[]) {
[this._request, this._options, this._arguments, this._argumentsKw] = messageArguments;
}
get messageCode() { return WampMessageType.Yield; }
get messageName() { return "YIELD"; }
get request() { return this._request; }
get options() { return this._options; }
get arguments() { return this._arguments; }
get argumentsKw() { return this._argumentsKw; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment