m-griffin / oblivion2-xrm Goto Github PK
View Code? Open in Web Editor NEWOblivion/2 XRM BBS Software
License: Other
Oblivion/2 XRM BBS Software
License: Other
Regex is all setup for field validation, however we don't want to exclude Unicode. ICU is compiled into boost on W32, for Boost Locale and general input parsing. However this appears to lack support in the Boost Regex at the moment. A recompile is needed along with testing in Linux.
Matrix Menu, I've noticed that switching light-bars appears to be redrawing all light-bars, or is flashing the entire line. Look into only refreshing and overwritten the current and previous selections like it should for fast redraws without flashes.
XRM-Server [YAML Config Files] Add Version and Checking.
We want to make sure if the layout changes, that the user will know when they are running an incorrect version and need to either run an update utility or add any new fields.
Handles User Access:
Flag Description
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
- False
+ True
SXXXX True if Level Greater or equal to X.
VX True if user is on Node X.
DXXXX True if File Level Greater or equal to
XXXX.
EX True if user called more than X times
today.
BXXX True if BPS Rate (w/o 00's) is Greater
or equal to XXX. (ie:3, 12, 24, 48,
96, 144, 168, 192, 384)
CXXX True if user hasn't changed his password
in xxx days.
FX True if X flag is set. (A-Z)
HX True if user is using menu set X.
IX True if user is using stat set X.
JX True if user has ANSI and X=0, or
user has AVATAR and X=1, or if user
has RIP and X=2.
OX True if flag X is set in the second
group of ACS Flags. (A-Z)
See *** Note following commands.
PXX True if user has XX file points.
YXXX True if it is at least XXX minutes
past midnight.
()'s Tells Obv/2 to Process Codes in
parenthesis before any other codes.
| Used to "Or" what is on the left
side of the | with what is on the
right side of the |.
~ Makes a Code False that would
otherwise be true and vice versa.
\ True if Fail Flag is True.
= True if user is local.
[ True only when system is run
multinode.
; True if input is not broken using
space or ESC.
' Used to prompt for SysOp password.
KX True if absolute file area # is equal
to value of X.
LX True if absolute message area # is
equal to value of X.
MX True if MSG conference is equal
to the value of X.
NX True of FILE conference is equal
to the value of X.
PXXXX True if # of file points is greater
than the value of XXXX.
TXXXX True if time left is greater than
the value of X.
UXXXX True if the user # is equal to X.
AXX True of age is greater than XX.
GX True if user is male (X must be
0), or user is female (X must be 1)
QX True after user has called more than X
times
RX True if total calls exceed X.
* True if user meets his Post/Call
Ratio
Xyyy True of the first three #s of the
user's phone number match. ie:
A216 holds true for all users
who's area code is 216. A216464 holds
true for all users who's number is in
area code 216 and prefix 464.
Zx True if Day of the Week = X
0=Sunday...6=Saturday
_ True if user is available for
Multinode Chat
$xx True if the user has changed his
password in xx days. ie: $10 is
true if the user changed his
password more than 10 days ago.
] True if screen pausing is on
Once the user records is logged in and verified, it then needs to be copied to the session data class so it is accessible and used through the system.
Initial setup for pulling in menu prompts has started.
The codes are parsed but now need to be handled to populate text where the MCI Codes were. And to also set the and move the cursor position to the end point for when the user starts to type input.
Change over the menu editor to use the new menu format.
Since were doing Asynchronous I/O meaning that all input data passes through to each system or module. That modules then handles updates to the screen depending on state and always returns right away. There are never loops waiting or checking for input in any system as the core async io handles this and then pushes out data as it comes in.
Goal, make a module state when needed that will switch the state, wait for input, then switch back like a pause or waiting for input key would do. Might be able to work something in the State Manager to push a second state, then pop it off and return back once the action is completed.
XRM-Server [MenuSystem] Refactor Core and Split from Machine State to Base class so that other interfaces can dynamically use and take advantage of light bars and dynamic command and function execution.
Access Level Table, create the tables and Data Access Objects to configure security levels.
Rename Menu Groups and Option Groups to ACS_String, to keep description of field in line with the data that will be used in the field. Was looking at group access, and changed it back for Access Condition System with Security Levels and AR flags for wider range of config ability.
Write Unit Tests for new Pipe2CodeMap
Functions for parsing MCI codes by regexp have been separated out to it's own method for easier testing. Now we have to write some tests to validate the regexp groupings.
Add configurable password limits for both login and newuser password on signup.
I've really wanted to help with this project but have almost no time, so I thought I'd do what I can and see how it compiles. Since I can just run that off in the background.
It looks like under gcc < 5 std::get_time isn't implemented yet (Stack Overflow link), so using gcc-4.9.3 it fails at line #L1046.
I'm going to install gcc 5 and compile again.
Add a menu prompt editor, most likely this is work with the Message Editor once it's been completed.
Updated Notes, Let add a new state which can be pushed on the stack, once input is received it can then be popped off the stack and continue where the user left off.
Notes, must store current screen, so when returning from state, we can redraw it.
Can also allow the state to run animations in a thread for different items and scripts.
Lots of ideas.
Time to start coding some of the menu internals.
Handle wild card commands
Setup menu switching
Displaying menu prompts.
Starting on Main menu, then will work backwards through the TOP menu which has pre-logon functions including oneliners data area.
Break out menu prompts from legacy dat format to individual .yaml files like the menu's are done. This will allow greater flexibility and easier editing and swapping of existing and new menu prompt files.
Generic Menu Templates were having issues with wrapping.
Also clear screen default from Legacy System used ESC2J only with no home cursor, this was causing slight display issues.
Remove case sensitive from handle, realname, email.
This should be used on password only.
Started, regex field validation, add colors to show valid and invalid input.
Write a new menu converter to convert legacy menus to the new YAML format.
Once completed we can then plug in the new format and extend it for more and new features.
Started Implementing menu option for changing to other menu's. Most menu's have worked but the Sysop menu crashed. Look into the options and setup of this menu.
Add Disconnect on Invalid Login Attempts with configurable setting in config file.
Some telnet applications and terminals do not support Implied ESC Sequences.
For example: ESC[;40H
by leaving out the digits before the ; semi-colon some terminals hard code this to 0, when Legacy OBV/2 used this sequence to imply current row, 40th column. So on this string we need to parse into buffer that will position then return the entire string pre-padded removing the sequence that isn't supported.
User records should populate default theme colors from the configured system theme colors.
the Menu system should then pull from user theme colors who can also update and configure their own default's such as the default color, input color, and inverse colors.
Currently the menu system is pulling from the configured system theme colors and not the default.
Issue appears to be with start menu population.
The menu jumps to gosysop, which then prompts for sysop password and moves onto the sysop menu.
Issue is caused by the initial starting menu not being populated and set as MAIN after the matrix. Once setting to main, the issue is then resolved.
Part II: is to pull the starting menu from the configuration, this is a configuration option where TOP menu can be setup for post-login stats and utils like last callers etc.. Then switches to main once completed.
XRM-Server [Config] Write unit tests for Regex default validations
Lets make sure all expression are solid for defaults.
Updated the Max Rows used detection, all prompts, For Examples sending feedback with y/n, logoff with y/n light bar prompts should always display under the menu prompt. The bottom of screen detection was off by 1 line so in some cases in 24 Line vs 25 Line Display the bottom row of the menu prompt is getting overwritten.
The core menu system is created, now to expand it to be used for Interfaces such as new user confirmation, and other interfaces that will require dynamic input and command execution. Later on a form system can be added in. The Form system will be put on hold to get more core items completed. Better to get functionality then eye candy right now.
Add a validation method to look over any settings that might have possible conflicts.
Just adding a starting point with initial checks for use_handle and use_realname.
Both both can be enabled, one or the other can be selected and used. However, both can not be false!
Theme colors for unformatted strings:
Stings that have no pipe colors codes in the string are considered default and unformatted.
These strings by default will use theme colors for default string, input, inverse, prompt.
To expand this, normal text prompts that are unformatted will have coloring added to brackets [ ] along with text inside of the brackets that match some of the default menu's like start reading messages
where with laid out with [S] Start Reading commands and these will get colorized. Using simple pipe codes will override the defaults.
Change over from Legacy to new .YAML menus
Update the MenuBase object to start using the new menu's. Then look over anything else needed for forms and other new features.
A user can login using their Handle, Real Name, or Email Address.
Extra Testing Notes
Must check and test with config use flags for handle, real name, and email address.
This also means if one can be blank, then we can no longer use unique indexes on user table for these (3) fields, but we can still validate this on the signup process.
There is wildcarding for menu commands:
If you set the Key to X*, then you can put * in the
Cstring and that will put what follows the X in the
Cstring. This is advisable for such cases as file
conference jumping such as J* with would do JM with a
Cstring of * so one could J1,J2, etc.
Also a possibility for CString is & in which is set to the
input gotten with -I, -J, or set with -*.
MCI Codes are now setup to where we can populate and array of codes to parse for specific screens. This needs testing and to be tested/implemented on the first screen for verify new user info.
XRM-Server [Starting Menu] Pull this from the Configuration file.
Right now it's defaulted to Main menu because the login sequence is not completed for TOP menu.
Still update this to use the config file.
Work out an easier system to setup fields and input in a configurable screen layout without manually customise the standard prompts.
Can you add an example of CONFIG.BBS? xrm-server doesn't seem to want to create the file on Ubuntu 14.04 LTS.
Create Generic Menu Templates
Templates are used for creating ANSI Graphic menu's that match across all menus.
These menu's use a (3) files system. A start, mid, and end screen.
Menu Title or Name is placed in the SRT ANSI.
Menu options are placed in the MID ANSI where meat of the screen is built from internal processing.
Menu footer is placed in the END ANSI.
Sets of screens can also be compiled into libraries where the user can select different themes according to preference.
Starting working on the custom Menu's Prompts Functions.
Some Menu's such as Feed Back, Logoff, and others use special pull down parameters
When the Pull down Filename has a single 'N' character.
the prompt string is then parsed for Template colors and special ending control codes
that either display YES/NO Light bars, or ask for user input that is then passed through to a menu command.
Some info from the doc's:
N
Writes the Name (menu prompt string) in the Prompt alone
May Contain:
^R - Regular Color ^S - Status Color
^P - Prompt Color ^E - Input Color
^V - Inverse Color ^X - Box Color
^M - Goes down a line
Using The Following To End:
/ Yes/No Bar Prompt beginning with No
\ Yes/No Bar Prompt beginning with Yes
= Yes/No/Quit Bar Prompt Beginning with Yes
| Yes/No/Quit Bar Prompt Beginning with No
@ Yes/No/Quit Bar Prompt Beginning with Quit
* Inputs String
: Inputs String with a : in a different color
# Hotkey without Echo
) Hotkey with Echo
( Sets the string equal to the Input Question
varaible set with -I, -J, or -M
You can use the following characters in the keys of a menu
using a name in prompt ending with a # or ).
All pipe codes are also applicable in this prompt.
This command is used to make menus that ask questions,
create hotkeyed type menus, or get input from users.
Bx
Does Bar selection menu with x number of columns
R
Uses a one-line bar menu. When creating command stacks,
make sure to only put a description on the first option in
the stack, otherwise your whole command stack will appear
on this menu. Also, make sure that all options don't exceed
80 colums, as this is a ONE line bar menu. If your options
exceed the 80 column limit, use the bar menus.
While testing menu switching I've noticed that when a menu is reloaded by changing menu's then changing back the menu options are no longer in the previous order. After some research YAML does not guarantee that Sequences are loaded in the same order they are present in the file. Boo!
I've already included a Menu Option Index with each menu command.
Update the Menu DAO (Data Access Object) to sort all Menu Options on the index field when menus are loaded. I was hoping this field could be removed, but it appears that it's needed to preserve the correct menu ordering which is also important for stacked command looping.
When the matrix or pulldown menu re-loads once the executed command or system returns, we need to check if the menu is pulldown or normal and re-hide the cursor again.
When changing the menu. need to make sure previous light bar options are cleared in menu base.
Switch from Matrix to Main which isn't a light bar. is still trying to build and display them.
Quick bug fix for %%DFFILENAME.ANS mci code for display ansi files in prompts.
the current method is removing the %% but leaving the DF in the filename, so file is not found.
oops.. 👍
Example: ^RMenu prompt
Was pushing the YES / NO bar forward the number of characters from the ^R code.
Correct parsing to convert to ANSI sequence prior to parsing screen for YES / NO light bar coordinates.
Terminal Output
disconnecting Node Session: 1
disconnecting Session completed.
Exception: remote_endpoint: Transport endpoint is not connected
~ConfigDAO
~Server
Menu Prompts setup as single lightbar prompts need to display [default] on the last line of the displaced screen. Make sure to calcumate what is drawn out, not by cursor position, then display the new question lightbar prompt at the bottom of the screen.
The system uses default system colors for prompt and input.
Updates Modules to use these default system colors which can be overridden by pipe colors in the in actual text prompt.
Also update all default yaml file creation to use default colors which minor colors, so users can see defaults and modify as they so choose.
XRM-Server [Menu Prompt] Display, or Re-display is off on prompt cursor position.
When the prompt is refreshed on the next menu it's left one position is should be.
Looks to be an issue with the screen buffer parsing.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.