public void JoinResult() { LoginResultState state = LoginResultState.Success; var msg = new JoinResultMessage (state, new UserInfo (Nickname, Nickname, UserId, ChannelId, true)); Assert.AreEqual (state, msg.Result); Assert.AreEqual (UserId, msg.UserInfo.UserId); Assert.AreEqual (Nickname, msg.UserInfo.Nickname); Assert.AreEqual (ChannelId, msg.UserInfo.CurrentChannelId); Assert.AreEqual (Muted, msg.UserInfo.IsMuted); msg.WritePayload (serverContext, writer); long length = stream.Position; stream.Position = 0; msg = new JoinResultMessage(); msg.ReadPayload (clientContext, reader); Assert.AreEqual (length, stream.Position); Assert.AreEqual (state, msg.Result); Assert.AreEqual (UserId, msg.UserInfo.UserId); Assert.AreEqual (Nickname, msg.UserInfo.Nickname); Assert.AreEqual (ChannelId, msg.UserInfo.CurrentChannelId); Assert.AreEqual (Muted, msg.UserInfo.IsMuted); }
internal void OnJoinMessage (MessageEventArgs<JoinMessage> e) { var join = e.Message; if (!e.Connection.IsConnected) return; if (join.Nickname.IsNullOrWhitespace ()) { e.Connection.SendAsync (new JoinResultMessage (LoginResultState.FailedInvalidNickname, null)); return; } if (!String.IsNullOrEmpty (this.context.Settings.ServerPassword) && join.ServerPassword != this.context.Settings.ServerPassword) { e.Connection.SendAsync (new JoinResultMessage (LoginResultState.FailedServerPassword, null)); return; } IUserInfo info = GetJoiningUserInfo (e.Connection, join); if (info == null) return; LoginResultState result = LoginResultState.Success; if (Manager.GetIsNicknameInUse (join.Nickname)) { if (!AttemptNicknameRecovery (info, join.Nickname)) result = LoginResultState.FailedNicknameInUse; } var msg = new JoinResultMessage (result, info); if (result == LoginResultState.Success) { Manager.Join (e.Connection, info); e.Connection.SendAsync (msg); if (!Manager.GetIsLoggedIn (e.Connection)) e.Connection.SendAsync (new PermissionsMessage (info.UserId, this.context.PermissionsProvider.GetPermissions (info.UserId))); foreach (IConnection connection in this.context.Connections) connection.SendAsync (new UserJoinedMessage (info)); } else e.Connection.SendAsync (msg); }