Skip to content

Commit

Permalink
Add PAGE text variable, create SessionEnum extension (#409)
Browse files Browse the repository at this point in the history
* Add Text_Variables

* Add Unknown to test

* Add Text Variables

* Add create date

* Merge changes

* remove unneeded comments

* Fixed credat

* Fixed test

* Fixed hard coded date

* fix usings

* reduce code

* Add Extension Unit Tests

* Add PAGE text variable, create SessionEnum extension

*Added PAGE text variable
*Moved SessionEnum logic out of UsersOnline and created extension for use in other places

* Add Unit Tests for new extension
  • Loading branch information
tuday2 committed Feb 21, 2021
1 parent 35070e9 commit 031497a
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 59 deletions.
54 changes: 54 additions & 0 deletions MBBSEmu.Tests/Extensions/EnumSessionState_Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using MBBSEmu.Extensions;
using MBBSEmu.Session.Enums;
using Xunit;

namespace MBBSEmu.Tests.Extensions
{
public class EnumSessionState_Tests
{
[Theory]
[InlineData(EnumSessionState.EnteringFullScreenEditor, "", "", true, true)]
[InlineData(EnumSessionState.ExitingFullScreenDisplay, "", "", true, true)]
[InlineData(EnumSessionState.InFullScreenDisplay, "", "", true, true)]
[InlineData(EnumSessionState.InFullScreenEditor, "", "", true, true)]
[InlineData(EnumSessionState.EnteringModule, "", "", true, true)]
[InlineData(EnumSessionState.RloginEnteringModule, "", "", true, true)]
[InlineData(EnumSessionState.InModule, "", "", true, true)]
[InlineData(EnumSessionState.LoginRoutines, "", "Main Menu", true, false)]
[InlineData(EnumSessionState.MainMenuDisplay, "", "Main Menu", true, false)]
[InlineData(EnumSessionState.MainMenuInput, "", "Main Menu", true, false)]
[InlineData(EnumSessionState.MainMenuInputDisplay, "", "Main Menu", true, false)]
[InlineData(EnumSessionState.ExitingModule, "", "Main Menu", true, false)]
[InlineData(EnumSessionState.SignupUsernameInput, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupUsernameDisplay, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupEmailDisplay, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupEmailInput, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupPasswordDisplay, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupPasswordInput, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupPasswordConfirm, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupPasswordConfirmDisplay, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.SignupPasswordConfirmInput, "<<New User>>", "New User Sign-up", false, false)]
[InlineData(EnumSessionState.Negotiating, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.Unauthenticated, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.LoginPasswordDisplay, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.LoginPasswordInput, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.LoginUsernameDisplay, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.LoginUsernameInput, "<<Logging In>>", "User Login", false, false)]
[InlineData(EnumSessionState.LoggingOffDisplay, "", "Logging Off", true, false)]
[InlineData(EnumSessionState.LoggingOffProcessing, "", "Logging Off", true, false)]
[InlineData(EnumSessionState.LoggedOff, "", "Logging Off", true, false)]
[InlineData(EnumSessionState.ConfirmLogoffInput, "", "Logging Off", true, false)]
[InlineData(EnumSessionState.ConfirmLogoffDisplay, "", "Logging Off", true, false)]
[InlineData(EnumSessionState.Disconnected, "*UNKNOWN*", "*UNKNOWN*", false, false)]
public void EnumSessionState_Test(EnumSessionState srcSessionState, string expUserName, string expUserOptionSelected, bool expUserSession, bool expModuleSession)
{
var srcSessionInfo = srcSessionState.GetSessionState();

//Verify Results
Assert.Equal(expUserName, srcSessionInfo.userName);
Assert.Equal(expUserOptionSelected, srcSessionInfo.UserOptionSelected);
Assert.Equal(expUserSession, srcSessionInfo.userSession);
Assert.Equal(expModuleSession, srcSessionInfo.moduleSession);
}
}
}
92 changes: 92 additions & 0 deletions MBBSEmu/Extensions/EnumSessionStateExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
using MBBSEmu.Session.Enums;
using System.Runtime.CompilerServices;

namespace MBBSEmu.Extensions
{
public static class EnumSessionStateExtensions
{
/// <summary>
/// Helper Method to determine a friendly description for EnumSessionState
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static (string userName, string UserOptionSelected, bool userSession, bool moduleSession) GetSessionState(this EnumSessionState b)
{
string userName;
string userOptionSelected;
bool userSession;
bool moduleSession;

switch (b)
{
case EnumSessionState.EnteringFullScreenDisplay:
case EnumSessionState.EnteringFullScreenEditor:
case EnumSessionState.ExitingFullScreenDisplay:
case EnumSessionState.InFullScreenDisplay:
case EnumSessionState.InFullScreenEditor:
case EnumSessionState.EnteringModule:
case EnumSessionState.RloginEnteringModule:
case EnumSessionState.InModule:
userName = "";
userSession = true;
userOptionSelected = "";
moduleSession = true;
break;
case EnumSessionState.LoginRoutines:
case EnumSessionState.MainMenuDisplay:
case EnumSessionState.MainMenuInput:
case EnumSessionState.MainMenuInputDisplay:
case EnumSessionState.ExitingModule:
userName = "";
userSession = true;
userOptionSelected = "Main Menu";
moduleSession = false;
break;
case EnumSessionState.SignupUsernameInput:
case EnumSessionState.SignupUsernameDisplay:
case EnumSessionState.SignupEmailDisplay:
case EnumSessionState.SignupEmailInput:
case EnumSessionState.SignupPasswordDisplay:
case EnumSessionState.SignupPasswordInput:
case EnumSessionState.SignupPasswordConfirm:
case EnumSessionState.SignupPasswordConfirmDisplay:
case EnumSessionState.SignupPasswordConfirmInput:
userName = "<<New User>>";
userSession = false;
userOptionSelected = "New User Sign-up";
moduleSession = false;
break;
case EnumSessionState.Negotiating:
case EnumSessionState.Unauthenticated:
case EnumSessionState.LoginPasswordDisplay:
case EnumSessionState.LoginPasswordInput:
case EnumSessionState.LoginUsernameDisplay:
case EnumSessionState.LoginUsernameInput:
userName = "<<Logging In>>";
userSession = false;
userOptionSelected = "User Login";
moduleSession = false;
break;
case EnumSessionState.LoggingOffDisplay:
case EnumSessionState.LoggingOffProcessing:
case EnumSessionState.LoggedOff:
case EnumSessionState.ConfirmLogoffInput:
case EnumSessionState.ConfirmLogoffDisplay:
userName = "";
userSession = true;
userOptionSelected = "Logging Off";
moduleSession = false;
break;
default:
userName = "*UNKNOWN*";
userSession = false;
userOptionSelected = "*UNKNOWN*"; //Default Value
moduleSession = false;
break;
}

return (userName, userOptionSelected, userSession, moduleSession);
}
}
}
66 changes: 10 additions & 56 deletions MBBSEmu/HostProcess/GlobalRoutines/UsersOnlineGlobal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using MBBSEmu.Memory;
using MBBSEmu.Module;
using MBBSEmu.Session;
using MBBSEmu.Session.Enums;
using System;
using System.Collections.Generic;
using System.Text;
Expand All @@ -20,62 +19,17 @@ public bool ProcessCommand(ReadOnlySpan<byte> command, ushort channelNumber, Poi
sessions[channelNumber].SendToClient("|RESET|\r\n|B||GREEN|LINE USER-ID ....... OPTION SELECTED|RESET|\r\n".EncodeToANSIArray());
foreach (var s in sessions.Values)
{
string userOptionSelected;
string userName;
switch (s.SessionState)
{
case EnumSessionState.EnteringFullScreenDisplay:
case EnumSessionState.EnteringFullScreenEditor:
case EnumSessionState.ExitingFullScreenDisplay:
case EnumSessionState.InFullScreenDisplay:
case EnumSessionState.InFullScreenEditor:
case EnumSessionState.EnteringModule:
case EnumSessionState.InModule:
userName = s.Username;
userOptionSelected = s.CurrentModule.ModuleDescription;
break;
case EnumSessionState.LoginRoutines:
case EnumSessionState.MainMenuDisplay:
case EnumSessionState.MainMenuInput:
case EnumSessionState.ExitingModule:
userName = s.Username;
userOptionSelected = "Main Menu";
break;
case EnumSessionState.SignupUsernameInput:
case EnumSessionState.SignupUsernameDisplay:
case EnumSessionState.SignupEmailDisplay:
case EnumSessionState.SignupEmailInput:
case EnumSessionState.SignupPasswordDisplay:
case EnumSessionState.SignupPasswordInput:
case EnumSessionState.SignupPasswordConfirm:
case EnumSessionState.SignupPasswordConfirmDisplay:
case EnumSessionState.SignupPasswordConfirmInput:
userName = "<<New User>>";
userOptionSelected = "New User Signup";
break;
case EnumSessionState.Negotiating:
case EnumSessionState.Unauthenticated:
case EnumSessionState.LoginPasswordDisplay:
case EnumSessionState.LoginPasswordInput:
case EnumSessionState.LoginUsernameDisplay:
case EnumSessionState.LoginUsernameInput:
userName = "<<Logging In>>";
userOptionSelected = "User Login";
break;
case EnumSessionState.LoggingOffDisplay:
case EnumSessionState.LoggingOffProcessing:
case EnumSessionState.LoggedOff:
case EnumSessionState.ConfirmLogoffInput:
case EnumSessionState.ConfirmLogoffDisplay:
userName = s.Username;
userOptionSelected = "Logging Off";
break;
default:
userOptionSelected = "Online"; //Default Value
userName = "*UNKNOWN*";
break;
var sessionInfo = s.SessionState.GetSessionState();

var userOptionSelected = sessionInfo.UserOptionSelected;
var userName = sessionInfo.userName;

if (sessionInfo.userSession)
userName = s.Username;

if (sessionInfo.moduleSession)
userOptionSelected = s.CurrentModule.ModuleDescription;

}
sessions[channelNumber].SendToClient($"|YELLOW||B| {s.Channel:D2} {userName,-31}... {userOptionSelected}|RESET|\r\n".EncodeToANSIArray());
}

Expand Down
13 changes: 10 additions & 3 deletions MBBSEmu/Session/SessionBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,17 +259,24 @@ protected SessionBase(IMbbsHost mbbsHost, string sessionId, EnumSessionState sta
InputBuffer = new MemoryStream(1024);
InputCommand = new byte[] { 0x0 };
VDA = new byte[Majorbbs.VOLATILE_DATA_SIZE];
_enumSessionState = startingSessionState;
SessionVariables = new Dictionary<string, TextVariableValue.TextVariableValueDelegate>
{
{"CHANNEL", () => Channel.ToString()},
{"USERID", () => Username},
{"BAUD", () => UsrPtr.Baud.ToString() },
{"TIME_ONLINE", () => SessionTimer.Elapsed.ToString("hh\\:mm\\:ss") },
{"CREDITS", () => UsrAcc.creds.ToString() },
{"CREATION_DATE", () => UsrAcc.credat != 0 ? UsrAcc.credat.FromDosDate().ToShortDateString() : mbbsHost.Clock.Now.ToShortDateString()}
{"CREATION_DATE", () => UsrAcc.credat != 0 ? UsrAcc.credat.FromDosDate().ToShortDateString() : mbbsHost.Clock.Now.ToShortDateString()},
{"PAGE", () =>
{
var sessionInfo = _enumSessionState.GetSessionState();
return sessionInfo.moduleSession ? CurrentModule.ModuleDescription : sessionInfo.UserOptionSelected;
}
}
};

_enumSessionState = startingSessionState;

OnSessionStateChanged += (_, _) => mbbsHost.TriggerProcessing();
}

Expand Down

0 comments on commit 031497a

Please sign in to comment.