diff --git a/lib/messages.dart b/lib/messages.dart index f4dfc10..8033cbc 100644 --- a/lib/messages.dart +++ b/lib/messages.dart @@ -6,7 +6,7 @@ export "src/messages/challenge.dart" show Challenge; export "src/messages/error.dart" show Error; export "src/messages/event.dart" show Event; export "src/messages/goodbye.dart" show Goodbye; -export "src/messages/hello.dart" show Hello; +export "src/messages/hello.dart" show Hello, IHelloFields; export "src/messages/interrupt.dart" show Interrupt; export "src/messages/invocation.dart" show Invocation; export "src/messages/message.dart" show Message; diff --git a/lib/src/joiner.dart b/lib/src/joiner.dart index 0a93a37..231b5ba 100644 --- a/lib/src/joiner.dart +++ b/lib/src/joiner.dart @@ -2,6 +2,7 @@ import "package:wampproto/auth.dart"; import "package:wampproto/messages.dart"; import "package:wampproto/serializers.dart"; import "package:wampproto/src/exception.dart"; +import "package:wampproto/src/messages/hello.dart"; import "package:wampproto/src/types.dart"; final clientRoles = >{ @@ -29,11 +30,13 @@ class Joiner { Object sendHello() { final hello = Hello( - _realm, - clientRoles, - _authenticator.authID, - [_authenticator.authMethod], - authExtra: _authenticator.authExtra, + HelloFields( + _realm, + clientRoles, + _authenticator.authID, + [_authenticator.authMethod], + authExtra: _authenticator.authExtra, + ), ); _state = stateHelloSent; diff --git a/lib/src/messages/hello.dart b/lib/src/messages/hello.dart index cf5d849..f17d116 100644 --- a/lib/src/messages/hello.dart +++ b/lib/src/messages/hello.dart @@ -2,9 +2,45 @@ import "package:wampproto/src/messages/message.dart"; import "package:wampproto/src/messages/util.dart"; import "package:wampproto/src/messages/validation_spec.dart"; +abstract class IHelloFields { + String get realm; + + Map get roles; + + String get authID; + + List get authMethods; + + Map get authExtra; +} + +class HelloFields implements IHelloFields { + HelloFields(this._realm, this._roles, this._authid, this._authmethods, {Map? authExtra}) + : _authextra = authExtra ?? {}; + final String _realm; + final Map _roles; + final String _authid; + final List _authmethods; + final Map _authextra; + + @override + String get realm => _realm; + + @override + Map get roles => _roles; + + @override + String get authID => _authid; + + @override + List get authMethods => _authmethods; + + @override + Map get authExtra => _authextra; +} + class Hello implements Message { - Hello(this.realm, this.roles, this.authID, this.authMethods, {Map? authExtra}) - : authExtra = authExtra ?? {}; + Hello(this._helloFields); static const int id = 1; static const String text = "HELLO"; @@ -19,11 +55,17 @@ class Hello implements Message { }, ); - final String realm; - final Map roles; - final String authID; - final List authMethods; - final Map authExtra; + final IHelloFields _helloFields; + + String get realm => _helloFields.realm; + + Map get roles => _helloFields.roles; + + String get authID => _helloFields.authID; + + List get authMethods => _helloFields.authMethods; + + Map get authExtra => _helloFields.authExtra; static Hello parse(final List message) { var fields = validateMessage(message, id, text, _validationSpec); @@ -45,7 +87,7 @@ class Hello implements Message { authExtra = validateMapOrRaise(fields.details!["authextra"], text, "authextra"); } - return Hello(fields.realm!, roles, authid, authMethods, authExtra: authExtra); + return Hello(HelloFields(fields.realm!, roles, authid, authMethods, authExtra: authExtra)); } @override