• Borealis Server Manager (BSM) Development Discussion Thread
    103 replies, posted
I would see if you could pull it from the stats command (you would also be able to grab the server FPS too). That tends to be more accurate especially when you consider SRCDS runs the entire game on a single thread and networking on another. That command was beyond useful when I used to run servers....htop was never accurate enough for me.
[B][I]"+force_install_dir"[/I][/B] now works exactly as expected, the server deploys to the directory given by the user, and if the directory is left blank, it deploys the server to the current directory that BSM is running from.
Any plans to support RCON? It would be cool to be able to use this on your personal PC to manage hosted webservers.
[QUOTE=TeamEnternode;51810876]Any plans to support RCON? It would be cool to be able to use this on your personal PC to manage hosted webservers.[/QUOTE] I will take a note of it, but it would definitely be a different angle to work with. We will see what happens.
Updated the main post to have a video of the most recent iteration of Borealis. [video]https://youtu.be/JP-gNYXD9Uw[/video] [B]3:22PM GMT Update:[/B] I've just finished rewriting the deployment code again, this time, when you deploy a gameserver, it will query the server only ONCE for all of the data needed to proceed with the deployment and to store the data into memory. This greatly reduces network usage and makes the deployment process slightly faster/smoother. I will be continuing work on the persistent configuration code to make it populate the rest of Borealis when you navigate around, and query specific data locally regarding your installed servers. I may take until tonight to commit an update to the repo. [B]7:04PM GMT Update:[/B] Reduced network overhead by about 90% since Borealis now only queries the server once for specific gameserver data, and stores it into memory throughout the entire deployment process. I've also added code to store server settings for deployed servers, and I have started implementing a system that allows you to see a list of all of the servers you have deployed using Borealis, where they were installed, and other parameters pertinent to their management. I'm running into more roadblocks with querying specific information from the array of json strings. Of course. lol If you have any resources that might be helpful, here are the details of the process. [B]1. You deploy a server, and it exports a json string of a combination of data from both the API server as well as the local parameters given by the user, the example output is below: (Ignore the space before "config.cfg" it's a formatting error with Facepunch.[/B] [code] {"server_name":"Garry's Mod Mayhem Server","server_type":"Garry's Mod","install_dir":"C:\\Users\\Nicole\\Desktop\\Borealis-Server-Manager\\BSM\\bin\\Debug","executable_dir":"\\steamapps\\common\\GarrysModDS\\srcds.exe","launch_arguments":"-console -game garrysmod +map gm_construct +maxplayers 16","server_config_file":"\\steamapps\\common\\GarrysModDS\\garrysmod\\cfg\\ server.cfg"} [/code] [B]2. I created a function that iterates through all of the json strings saved in the config.json file stored next to Borealis, and stores all of them into a list.[/B] [code] //================================================== ===================================// // Retrieve all config.json strings as list // //================================================== ===================================// public static List<string> GetConfigJsonStrings() { int BracketCount = 0; string GameServerList = new StreamReader(Environment.CurrentDirectory + @"\config.json").ReadToEnd(); List<string> JsonItems = new List<string>(); StringBuilder Json = new StringBuilder(); foreach (char c in GameServerList) { if (c == '{') ++BracketCount; else if (c == '}') --BracketCount; Json.Append(c); if (BracketCount == 0 && c != ' ') { JsonItems.Add(Json.ToString()); Json = new StringBuilder(); } } return JsonItems; } [/code] [B]3. When you load either the Management or Control panels, it then queries the json string list, and searches for all of the friendly-names of deployed servers and populates the dropdown list with that data:[/B] [code] //Pull all gameserver data from config.json, split all json strings into a list, iterate through that list for specific data. foreach (var jsonString in SettingsManagement_Classes.GetConfigJsonStrings()) { Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(jsonString); comboboxGameserverList.Items.Add((string)o["server_name"]); } [/code] [B]What I am currently caught up on, is coding a way for Borealis to pull all properties of a specific json string from the list, and populate fields in the Management panel with that data, allowing you to update and change the property values, if anyone is particularily talented in this field, please reach out to me via a GitHub pull request or via Discord @ [url]https://discord.gg/6rMpYXz[/url][/B]
[B]Have not had a lot of time today to do much work with Borealis, other than finally getting rid of the placeholder servers from the dashboard and actually starting to fill the server list with actual deployed servers from the config.json file.[/B] I hope to start making more major progress across the next two days since I'm off work. [IMG]https://i.imgur.com/Ka9KILu.png[/IMG]
[B]Finally got some notable changes:[/B] - SteamCMD output is now piped to the status readout in Borealis - SteamCMD's console window is no longer visible - The percentage bar now accurately reports the progress of a SteamCMD-based server deployment in Borealis via parsing the piped output - The Dashboard now actually lists servers you have deployed, and the type of servers they are (additional metrics information has yet to be coded in) - Cleaned up the internal code some more - When the deployment is complete, instead of hardcoding a completion message, it parses the output from SteamCMD and only tells you it's complete if there are no errors and it completes successfully. - Incorporated [b]+validate[/b] into the deployment process for SteamCMD-based servers. [video=youtube;pvaqEpEwZnY]https://www.youtube.com/watch?v=pvaqEpEwZnY[/video]
[QUOTE=WhiteWhiskers;51825241][B]Finally got some notable changes:[/B] - SteamCMD output is now piped to the status readout in Borealis - SteamCMD's console window is no longer visible - The percentage bar now accurately reports the progress of a SteamCMD-based server deployment in Borealis via parsing the piped output - The Dashboard now actually lists servers you have deployed, and the type of servers they are (additional metrics information has yet to be coded in) - Cleaned up the internal code some more [video=youtube;pvaqEpEwZnY]https://www.youtube.com/watch?v=pvaqEpEwZnY[/video][/QUOTE] Amazing job! This will come in handy when I'm going to setup our office's lan party.
[QUOTE=tisseman890;51825252]Amazing job! This will come in handy when I'm going to setup our office's lan party.[/QUOTE] Borealis is not yet feature-complete. When it reaches Beta, then you can use it for management. Until then, all Borealis can currently do is deploy gameservers for you automatically. Just trying to keep expectations clear while it's still in alpha.
[QUOTE=WhiteWhiskers;51825256]Borealis is not yet feature-complete. When it reaches Beta, then you can use it for management. Until then, all Borealis can currently do is deploy gameservers for you automatically. Just trying to keep expectations clear while it's still in alpha.[/QUOTE] That's okay, still makes some stuff more easy to do.
[U][B]Status Update:[/B][/U] [B] - Finally added and fully implemented a [B][I]"Cancel"[/I][/B] button to terminate server deployments. - Added complete error handling in the event SteamCMD throws an error, and automatically restarts deployment where it last left off without needing user intervention anymore. Fantastic! :) - Completely optimized the deployment code again. [I][U](Noted Below)[/U][/I] [/B] So, originally the deployment code was very, very messy, huge, and redundant, now when a user deploys a gameserver, it runs code to first verify that you want to deploy that gameserver, and if you say yes, it runs a separate void method that actually performs the deployment. Overall, the code has been cut by about 2/3rds, or roughly 130 lines of code. By doing this, now we have one single method that handles the logic behind the deployment without needing three copies of the same code to perform the same task. [b]Seen Below: The deployment message window code that occurs when you press the button to deploy a gameserver.[/b] [code] //===================================================================================// // QUERY THE USER TO VERIFY DEPLOYMENT BEFORE BEGINNING SERVER DEPLOYMENT // //===================================================================================// private void btnDeployGameserver_Click(object sender, EventArgs e) { //Query specific appID for all required data. ServerAPI_Classes.QUERY_DATA(ServerAPI_Classes.QUERY_STEAM_APPID(dropdownServerSelection.Text)); //Determine where to deploy the server based on user input. if (txtboxDestinationFolder.Text == "") { DeploymentValues.deployment_directory = Environment.CurrentDirectory; } else { DeploymentValues.deployment_directory = txtboxDestinationFolder.Text; } //Determine whether or not to verify integrity of the installation. if (chkVerifyIntegrity.Value == true) { DeploymentValues.verify_integrity = " +validate"; } else { DeploymentValues.verify_integrity = ""; } switch (ServerAPI_Classes.QUERY_JOBJECT.bsm_integration) { case "none": if (MetroMessageBox.Show(BorealisServerManager.ActiveForm, "Type of GameServer: [" + dropdownServerSelection.Text + "]\n" + "Deploy to: [" + DeploymentValues.deployment_directory + "]" + "\n\nWARNING: This gameserver currently has NO BGM support.\nYou can deploy it, but BGM cannot configure or control it at this time.", "Deploy GameServer?", MessageBoxButtons.YesNo, MessageBoxIcon.Stop) == DialogResult.Yes) { DeployGameServer(); } break; case "partial": if (MetroMessageBox.Show(BorealisServerManager.ActiveForm, "Type of GameServer: [" + dropdownServerSelection.Text + "]\n" + "Deploy to: [" + DeploymentValues.deployment_directory + "]" + "\n\nWARNING: This gameserver currently has PARTIAL BGM support.\nYou can deploy it, but BGM can only configure it at this time, you have no ability to control it directly through BGM.", "Deploy GameServer?", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) { DeployGameServer(); } break; case "full": if (MetroMessageBox.Show(BorealisServerManager.ActiveForm, "Type of GameServer: [" + dropdownServerSelection.Text + "]\n" + "Deploy to: [" + DeploymentValues.deployment_directory + "]", "Deploy GameServer?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { DeployGameServer(); } break; } } [/code] [b]Seen Below: The method that handles all server deployments that is invoked by either the SteamCMD error-handler or via the normal deployment process.[/b] [code] //===================================================================================// // STAND-ALONE DEPLOYMENT CODE // //===================================================================================// private void DeployGameServer() { //Enable cancel button to terminate deployment process if needed. lblDownloadProgressDetails.Text = "Status: Downloading " + dropdownServerSelection.Text + "..."; btnCancelDeployGameserver.Visible = true; switch (ServerAPI_Classes.QUERY_JOBJECT.steamcmd_required) { case "True": { SteamCMD_Classes.DownloadSteamCMD(); switch (ServerAPI_Classes.QUERY_JOBJECT.steam_authrequired) { case "True": MetroMessageBox.Show(BorealisServerManager.ActiveForm, "Due to the fact that we do not have an authentication system in place for Steam, you cannot download non-anonymous SteamCMD dedicated servers at this time. We apologize, and hope to get this incorporated soon!", "Steam Authentication Required", MessageBoxButtons.OK, MessageBoxIcon.Error); break; case "False": ExecuteWithRedirect(Environment.CurrentDirectory + @"\steamcmd.exe", string.Concat("+login anonymous +force_install_dir ", "\"", DeploymentValues.deployment_directory, "\"", " +app_update ", ServerAPI_Classes.QUERY_STEAM_APPID(dropdownServerSelection.Text), DeploymentValues.verify_integrity, " +quit")); SettingsManagement_Classes.DeployGameserver(txtServerGivenName.Text, dropdownServerSelection.Text, DeploymentValues.deployment_directory, ServerAPI_Classes.QUERY_JOBJECT.server_executable_location, ServerAPI_Classes.QUERY_JOBJECT.default_launch_arguments, ServerAPI_Classes.QUERY_JOBJECT.server_config_file); break; } } break; case "False": { //RUN OTHER CODE TO DEPLOY THE NON-STEAMCMD GAMESERVER } break; } } [/code] [b]Seen Below: The error and success handler that runs code during the deployment process to handle SteamCMD's errors, restarting the deployment if necessary, or notifying the user that the deployment is complete / already up-to-date[/b] [code] void proc_DataReceived(object sender, DataReceivedEventArgs e) { if (e.Data != null) { lblDownloadProgressDetails.Text = e.Data; try { progressbarDownloadProgressOverall.Value = Convert.ToInt32(Double.Parse(Regex.Match(e.Data, @"\:([^)]*)\(").Groups[1].Value)); } catch (Exception) { //Do nothing } //SteamCMD error and success handler. if (ServerAPI_Classes.QUERY_JOBJECT.steamcmd_required == "True") { if (e.Data == "Success! App '" + ServerAPI_Classes.QUERY_STEAM_APPID(dropdownServerSelection.Text) + "' already up to date." || e.Data == "Success! App '" + ServerAPI_Classes.QUERY_STEAM_APPID(dropdownServerSelection.Text) + "' fully installed.") { MetroMessageBox.Show(BorealisServerManager.ActiveForm, txtServerGivenName.Text + " [" + dropdownServerSelection.Text + "]" + " has been successfully deployed with default configurations!\nPlease goto the management tab to configure it.", "Complete!", MessageBoxButtons.OK, MessageBoxIcon.Question); btnCancelDeployGameserver.Visible = false; } else if (e.Data == "Error! App '" + ServerAPI_Classes.QUERY_STEAM_APPID(dropdownServerSelection.Text) + "' state is 0x202 after update job.") { DeployGameServer(); } } else { //RUN OTHER CODE FOR NON-STEAMCMD GAMESERVER } } } [/code] [editline]15th February 2017[/editline] [b]Fixed an issue where the deployment config data would be exported every time a deployment was issued, even during retries, this way, it only happens once the deployment is successful, rather than when it is simply deployed.[/b] [editline]15th February 2017[/editline] [B]Fixed another issue that caused buttons to not appear, dissapear, and enable/disable when required.[/B]
[B]Made some major progress regarding servers, since the last couple days I have not been putting time into Borealis[/b] - Borealis no longer reads from the [B]config.json[/B] file except once, when the program first starts up. - When Borealis starts up, it parses the server data from the config.json into an unserialized JObject list stored in memory, that any part of Borealis can access when needed, this allows for a smoother experience since the data is only loaded once. [B]Soon to be implemented:[/B] - I am working on adding code that will iterate through the JObject list when the program is closing, and re-serialize the server data back into the config.json file, re-writing it, instead of modifying it. - I am working on adding more functionality to the management panel that will allow you to modify values, commit them to the associated entry in the JObject list. I still have a lot of work to do, but I'm glad to be making some major progress in this regard. [B]The code that is used to store newly deployed gameservers into memory as well as on-disk:[/B] [code] public void DeployGameserver(string server_name, string server_type, string install_dir, string executable_dir, string launch_arguments, string server_config_file, bool running_status) { dynamic serverData = new JObject(); serverData.server_name = server_name; serverData.server_type = server_type; serverData.install_dir = install_dir; serverData.executable_dir = executable_dir; serverData.launch_arguments = launch_arguments; serverData.server_config_file = server_config_file; serverData.running_status = running_status; addServer(serverData); // Write JSON directly to config.json in the event of a crash using (StreamWriter file = File.AppendText(Environment.CurrentDirectory + @"\config.json")) using (JsonTextWriter writer = new JsonTextWriter(file)) { serverData.WriteTo(writer); } } [/code] [B]When you launch Borealis, this code reads the config.json and stores the deserialized JObjects into the JObject list into memory.[/B] [code] public void addAllServers_fromConfig() { int BracketCount = 0; string GameServerList = new StreamReader(Environment.CurrentDirectory + @"\config.json").ReadToEnd(); StringBuilder Json = new StringBuilder(); foreach (char c in GameServerList) { if (c == '{') ++BracketCount; else if (c == '}') --BracketCount; Json.Append(c); if (BracketCount == 0 && c != ' ') { Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(Json.ToString()); addServer(o); Json = new StringBuilder(); } } } [/code] [B]The JObject list itself that stores all of the JObject gameservers in memory.[/B] [code] public static List<JObject> server_collection = new List<JObject>(); [/code] [B]The class that is instanced to create every gameserver:[/B] [code] public class GameServer { public string server_name { get; set; } public string server_type { get; set; } public string install_dir { get; set; } public string executable_dir { get; set; } public string launch_arguments { get; set; } public string server_config_file { get; set; } public bool running_status { get; set; } } [/code] [b]And finally the code to add a new gameserver to the JObject list:[/b] [code] public void addServer(Newtonsoft.Json.Linq.JObject gameserver_object) { server_collection.Add(gameserver_object); } [/code] [editline]21st February 2017[/editline] I've also gotten some progress in terms of the "Control" panel. I currently have no way of piping input into the server after its been launched, which I need to address. I also have no way to handle all of the processes and redirecting their input dynamically based on which server you have chosen to control. [img]https://i.imgur.com/DoOZErw.png[/img]
[b]- Added functionality that dumps the JObject list running from memory to config.json when the program is closed, deleting the existing config.json file. - Added functionality that allows newly deployed servers to be both added to the active JObject list running in memory, as well as in the config.json file in the event Borealis crashes expectantly. - Added new alpha build for the public to play with: [URL="https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.0.0-alpha"]https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.0.0-alpha[/URL] [/b] [img]https://i.imgur.com/AfdjXOe.png[/img] [editline]22nd February 2017[/editline] [b]New video showcasing the progress:[/b] [video]https://youtu.be/b7Rs6HMhAfE[/video]
[QUOTE] I currently have no way of piping input into the server after its been launched, which I need to address. I also have no way to handle all of the processes and redirecting their input dynamically based on which server you have chosen to control. [/QUOTE] You can hook into the source server console somehow using those commands but I'm not sure how it works since it is an undocumented feature. [IMG]http://i.imgur.com/nVOvahM.png[/IMG]
I understand this is still in early development but what is going to be the advantage of using this over something like tcadmin or are you not going for the same kind of layout?
It seems odd that you can't just pull down from github and compile, why is that?
[QUOTE=jack ralph;51863272]I understand this is still in early development but what is going to be the advantage of using this over something like tcadmin or are you not going for the same kind of layout?[/QUOTE] Up until now, I have never heard of TCAdmin, but it certainly looks like a good foundation to reference. The reason I have been working on rolling out my own solution is because I want the experience working with the community to create a project that can be used by everyone, modified by anyone, and ultimately, is completely free. TCAdmin offers monthly and permanent licensing options, both of which can be certainly out of the price-range of a basic server admin. I strongly believe that software that is open like Borealis allows people to improve upon it themselves and allows the product to 'evolve'. The reason I am not deploying a Linux variant of Borealis is because, as I've said before, the Linux market of solutions is completely saturated, and I wanted someone who has barely ANY experience with servers, to have the ability to deploy one as painlessly as possible. While I will never charge for Borealis, I will possibly open the option for donations down the road. In the end, it never hurts to give folks another option to choose from when it comes to gameserver hosting solutions. If they choose to use a different solution such as TCAdmin, that's entirely their choice. [QUOTE=brianosaur;51864743]It seems odd that you can't just pull down from github and compile, why is that?[/QUOTE] I wouldn't be able to say for certain, but a common suspect is the Bunifu Framework. I suspect that they have built in DRM that protects the library from being used in an unauthorized situation. I don't really see a way out of this unless I completely write my own UI library to mimic theirs. That is why I request that people submit pull requests on GitHub so I can personally compile the new changes and review them for quality concerns. As I have stated in the original post of this thread, seeing the source-code is mostly for people to submit their own changes to the source code, and to be able to read the source-code in the event that they are suspicious of something in the program. I will look into talking with the marketing manager of Bunifu to see if I can find a way around this limitation.
[B]Status Update:[/B] - The logic that handles the animations is now a function that can be used over and over, instead of hard-coding every button animation. - The layout of the tabs are now categorized and designed in a much more easy-to-add way, to make-way for future feature expansions. - The MDI children that are responsible for displaying the management, deployment, control, and dashboard panels are now 100% persistent, so no longer will clicking a new tab destroy the old one! The underlying code that makes this possible is less than ideal, but it gets the job done. - The flickering associated with the depreciated process of loading instanced panels is now completely GONE. No more flickering when switching tabs. - The performance of switching between tabs is now drastically improved due to Borealis no longer making new instances of each panel. - I have added a visibility panel on top of the MDI parent zone during the initial load of Borealis, so if you have a slower computer or just have a lot going on, it will not show you the MDI children until they have all loaded, then the visibility panel becomes invisible so you can start using the program. - Fixed the Management panel not showing the proper "Server Property / Value" columns, now, the configuration data associated with your deployed server is properly shown in the table. - Experimental area re-added for now for use during the development cycle. - Tab animations are significantly more responsive now. You can find a new release to test and experiment with [URL="https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.5.0-alpha"][B]Here[/B][/URL] [IMG]https://i.imgur.com/T4I93M0.png[/IMG]
[B]In the new release, the internal code referencing the API server has been updated to reflect the newly moved API server. The server no longer resides at [url]http://sfo3.hauteclaire.me:80[/url], instead it now resides on [url]http://phantom-net.duckdns.org:1337[/url]. This way I directly host and manage the back-end server. (The reasons include, but are not limited to, Mezarith not wanting to be a permanent host operating it, just the developer maintaining it.)[/B] [B]Download: [URL="https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.5.1-alpha"]Here[/URL][/B]
As this is for dedicated servers, can the name be changed to Borealis Dedicated Server Manager? I feel like the acronym would give you a lot more publicity.
[QUOTE=James xX;51882239]As this is for dedicated servers, can the name be changed to Borealis Dedicated Server Manager? I feel like the acronym would give you a lot more publicity.[/QUOTE] This surprisingly, has already been on the table for quite some time, and held back due to that exact funny reason. If we actually do go through with a branding change, for a third time, I would hope this would be the absolute last time. Seriously though, I wouldn't mind naming it that for shock-sake. lol
[B]Status Update:[/B] - 35+ new tooltips are scattered throughout all of Borealis, giving the user detailed information regarding the controls and fields within Borealis, to better help them understand what they do, and how to best use them. They will have more detail added to them down the road as Borealis becomes more complex. - Internal code has been further cleaned up and organized in a way that should make it easier to scan through it being a contributor. - I've added the framework for a Web Interface that will represent a front-end to the Borealis desktop back-end application. It will be purely optional, and might not even be packaged with Borealis by default, I've developed a communication system between the desktop application and the ASP.NET web application, but it's still FAR away from being usable. - I've added a new menu entry called "Scheduled Tasks", where I plan to incorporate gameserver backups, server updates, and general low-level maintenance tasks. - It will be some time as I try to figure out how to best handle piping multiple server's console data without creating conflicts between them, and incorporating a way to handle regaining control of still-running servers in the event of a crash. - I am also primarily focusing myself on developing a system to manage the configuration data of each server / server instance. This is holding up the 0.4.0.0 release. If anyone is talented in ASP.NET Web Applications to help develop the Web Interface, please reach out to me on GitHub or on our Discord channel: [url]https://discord.gg/6rMpYXz[/url] It's still super early in its development, so I am very open to changes to the WebUI system. [img]https://cdn.discordapp.com/attachments/276981822343086081/286761926904643584/unknown.png[/img]
[B]Status Update:[/B] [B]- [/B]Re-wrote the internal code that handles gameserver management, and unified all of it. Originally there were three separate classes that held data regarding gameservers, and now, all of that data is unified into one class, and use the data as necessary throughout the program. [B]- [/B]Added 55 more gameservers for a total of 95 gameservers. They currently cannot be deployed because they depend on authenticating against SteamCMD in order to deploy, i've added in the code necessary to prepare for them. Now, all but 2 of the servers from [URL="https://developer.valvesoftware.com/wiki/Dedicated_Servers_List"]https://developer.valvesoftware.com/wiki/Dedicated_Servers_List[/URL] are listed within Borealis. (Source SDK and related servers are omitted). [B]- [/B]The stored data on the API Server is much more detailed than before, and property references both inside and outside of Borealis are more unified. [B]- [/B]Removed the "Experimental Area" from Borealis. [B]You can see below, what the new structure for the gameserver class looks like, encompassing all properties you would need to currently reference. (I've added a lot of comments throughout Borealis to make it as understandable as possible)[/B] I am already looking into removing the redundancies between having both SERVER_name and SERVER_type. [code] public class GameServer { //Server-based Properties public string SERVER_name { get; set; } //Default name public string SERVER_name_friendly { get; set; } //User-designated name public string SERVER_type { get; set; } //Type of gameserver (e.g. "Garry's Mod", "Synergy", etc) public string SERVER_launch_arguments { get; set; } //Default launch arguments and current launch arguments public bool SERVER_running_status { get; set; } //Determine whether the server is running or stopped //Directory-based Properties public string DIR_install_location { get; set; } //Location of where gameserver was deployed public string DIR_executable { get; set; } //The relative location of where the server executable is located relative to install location public string DIR_config { get; set; } //Relative config directory public string DIR_config_file { get; set; } //Name of configuration file if there is only one that controls the server //Steam-based Properties public bool STEAM_authrequired { get; set; } //Determine whether the server requires Steam Guard or allows anonymous login public bool STEAM_steamcmd_required { get; set; } //Determines if the gameserver is deployed using steamcmd or not public bool STEAM_workshop_enabled { get; set; } //Determines if the gameserver supports Steam Workshop //Miscellanious Properties public bool srcds_server { get; set; } //Determines if the server is based on SRCDS public string bsm_integration { get; set; } //Determines the support level of the gameserver in Borealis } [/code] [B]Below, you can see what the new structure of the json configuration files stored on the API Server:[/B] [code] { "SERVER_name": "Garry's Mod", "SERVER_launch_arguments": "-console -game garrysmod +map gm_construct +maxplayers 16", "DIR_executable": "\\steamapps\\common\\GarrysModDS\\srcds.exe", "DIR_config": "\\steamapps\\common\\GarrysModDS\\garrysmod\\cfg", "DIR_config_file": "server.cfg", "STEAM_authrequired": false, "STEAM_steamcmd_required": true, "STEAM_workshop_enabled": true, "srcds_server": true, "bsm_integration": "none" } [/code] [B]Lastly, in order to continue using Borealis in it's current alpha state, you will be required to download the newest release, available below:[/B] [URL="https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.5.2-alpha"]https://github.com/cyberstrawberry101/Borealis-Server-Manager/releases/tag/v0.3.5.2-alpha[/URL] [B]Currently, the Management panel doesn't do anything useful outside of showing you what the current values of the deployed gameserver are. Clicking on "Load Config" will open a file dialog in the config directory given by that specific gameserver, allowing you to open either *.cfg or *.ini files at this point in time. I need a proper way to universally parse data across different styles of configuration files in order to universally be able to open and edit config files directly from Borealis.[/B] [IMG]https://cdn.discordapp.com/attachments/276981822343086081/287820860490776577/unknown.png[/IMG]
[B]Small, but I think really useful update:[/B] [B]- [/B]You will notice that the configuration output, that is dumped to disk, and loaded when Borealis loads, is [I][U]finally[/U][/I] formatted properly, and significantly easier to read and manually change if necessary. [IMG]https://i.imgur.com/3kbRtje.png[/IMG] [IMG]https://i.imgur.com/KhRZUcF.png[/IMG] [code] { "SERVER_name": "Garry's Mod", "SERVER_name_friendly": "Builders Madness", "SERVER_type": "Garry's Mod", "SERVER_launch_arguments": "-console -game garrysmod +map gm_construct +maxplayers 16", "SERVER_running_status": false, "DIR_install_location": "C:\\Users\\Administrator\\Desktop\\Borealis", "DIR_executable": "\\steamapps\\common\\GarrysModDS\\srcds.exe", "DIR_config": "\\steamapps\\common\\GarrysModDS\\garrysmod\\cfg", "DIR_config_file": "server.cfg", "STEAM_authrequired": false, "STEAM_steamcmd_required": true, "STEAM_workshop_enabled": true, "srcds_server": true, "bsm_integration": "none" }{ "SERVER_name": "Killing Floor 2", "SERVER_name_friendly": "PhantomNet Death Emporium", "SERVER_type": "Killing Floor 2", "SERVER_launch_arguments": "Difficulty=1?GameLength=2", "SERVER_running_status": false, "DIR_install_location": "C:\\Users\\Administrator\\Desktop\\Borealis", "DIR_executable": "\\steamapps\\common\\killingfloor2\\Binaries\\Win64\\KFServer.exe", "DIR_config": "\\steamapps\\common\\killingfloor2\\KFGame\\Config\\", "DIR_config_file": "PCServer-KFGame.ini", "STEAM_authrequired": false, "STEAM_steamcmd_required": true, "STEAM_workshop_enabled": true, "srcds_server": false, "bsm_integration": "none" }{ "SERVER_name": "Team Fortress 2", "SERVER_name_friendly": "Rage Against the Machines", "SERVER_type": "Team Fortress 2", "SERVER_launch_arguments": "", "SERVER_running_status": false, "DIR_install_location": "C:\\Users\\Administrator\\Desktop\\Borealis", "DIR_executable": "", "DIR_config": "", "DIR_config_file": "", "STEAM_authrequired": false, "STEAM_steamcmd_required": true, "STEAM_workshop_enabled": false, "srcds_server": true, "bsm_integration": "none" }{ "SERVER_name": "Synergy", "SERVER_name_friendly": "Team Destruction and Exploration", "SERVER_type": "Synergy", "SERVER_launch_arguments": "-console -game synergy +map d1_trainstation_01 +maxplayers 16", "SERVER_running_status": false, "DIR_install_location": "C:\\Users\\Administrator\\Desktop\\Borealis", "DIR_executable": "\\steamapps\\common\\Synergy Dedicated Server\\srcds.exe", "DIR_config": "\\steamapps\\common\\Synergy Dedicated Server\\synergy\\cfg", "DIR_config_file": "server.cfg", "STEAM_authrequired": false, "STEAM_steamcmd_required": true, "STEAM_workshop_enabled": false, "srcds_server": true, "bsm_integration": "none" } [/code] I'm not sure how much coding I will be doing today, as the work I started last night exhausted me a little bit. I will push a commit with the newest changes, but it won't be pushed to another release until something more substantial occurs again.
UI looks clean & slick!
[B]March 5th 2017 Status Update:[/B] [QUOTE="Changelog"] - Fixed a massive bug, that was reported to me by Hauteclaire. The bug involves you deploying a server, only to have it not show up in the rest of Borealis after it was deployed. Borealis now pulls new data for the panels everytime you load that panel. (Note, the entire form is not being instanced, just the data is being re-collected and populated into the applicable fields). - Got rid of the alpha Management config box, now it properly shows the default config file to allow you to edit and save it. (The saving & editing functionality has not been incorporated yet) - Added "Load Config Manually" button, to allow the user to select a server config file manually to edit. - Groundwork for allowing the user to change the friendly server name and launch arguments has been implemented, and need to be fleshed out to allow the user to update them in the json configuration. - If a server, such as Garry's Mod, Synergy, or Killing Floor 2 is loaded, it will be launchable in the "Control" panel, but there is no way to regain control if you start another server, and there is currently no hook to kill the server on-demand, which needs to be added. (This is a huge undertaking). - Added error handler whereas if a server has a designated default config file, but it cannot be found, it will alert the user. - [B]Removed the need to run the program as an administrator[/B] (Unusual circumstances may require you to run it as an administrator) [/QUOTE] [img]https://cdn.discordapp.com/attachments/276981822343086081/288103715615801344/unknown.png[/img] [img]https://cdn.discordapp.com/attachments/276981822343086081/288105724989669388/unknown.png[/img]
Okay, this was basically ignored last time but I'll mention it again: you should be getting the CPU usage from srcds, [i]not[/i] from Windows. For example, I just spawned 50 giant props inside of each other. Here's what srcds reports: [t]http://i.imgur.com/7GeveCG.png[/t] And here's what the task manager/Windows reports: [t]http://i.imgur.com/TFBwKvW.png[/t] Obviously it's not realistic that a player is spawning 50 props inside of each other, but my point is that when the server is overloaded and CPU thread maxed, Windows will not report the same. Unless you're not wanting to report srcds' actual performance and instead are aiming to just show the load that srcds instance has on the physical server.
[QUOTE=Banana Lord.;51918920]Okay, this was basically ignored last time but I'll mention it again: you should be getting the CPU usage from SRCDS, [i]not[/i] from Windows. For example, I just spawned 50 giant props inside of each other. Here's what SRCDS reports: [t]http://i.imgur.com/7GeveCG.png[/t] And here's what the task manager/Windows reports: [t]http://i.imgur.com/TFBwKvW.png[/t][/QUOTE] Oh, wow, I didn't notice how much of a discrepancy there was between the two. Not all servers are SRCDS-based, so I would need a reliable way to query all 95 different servers to poll that data, and collect it together. I will add this to the high priority list of things to get taken care of once the "Control" portion of Borealis is fleshed out. I've been [I]intentionally [/I] staying away from statistics and server launching code, as it is the largest undertaking, and I want to continue ironing out issues from the Deployment and Management panels first. [B]Addendum:[/B] [QUOTE=Banana Lord.;51918920] Obviously it's not realistic that a player is spawning 50 props inside of each other, but my point is that when the server is overloaded and CPU thread maxed, Windows will not report the same. Unless you're not wanting to report srcds' actual performance and instead are aiming to just show the load that srcds instance has on the physical server.[/QUOTE] I [I]will[/I] be looking into polling individual servers based on the type of server they are, hence the flag stored in the config data: [code]"srcds_server": true[/code] There will eventually be other flags to handle other kinds of servers, such as Unreal Engine, Unity, and so-forth.
Understood - I just wanted to make that point clear. I've been loosely following this thread so I didn't realize it wasn't just srcds, sorry. But yeah, totally different numbers. This is why it's so difficult to run servers with huge amounts of players and still keep it playable. [editline]5th March 2017[/editline] If you're going to be supporting unreal, unity, etc in the future why not set up the config key as "engine_type" ["srcds"|"unity"|"unreal"] for instance? A bit cleaner and ensures no one will accidentally set srcds_server and unity_server to true.
[QUOTE=Banana Lord.;51918944]Understood - I just wanted to make that point clear. I've been loosely following this thread so I didn't realize it wasn't just srcds, sorry. But yeah, totally different numbers. This is why it's so difficult to run servers with huge amounts of players and still keep it playable. [editline]5th March 2017[/editline] If you're going to be supporting unreal, unity, etc in the future why not set up the config key as "engine_type" ["srcds"|"unity"|"unreal"] for instance? A bit cleaner and ensures no one will accidentally set srcds_server and unity_server to true.[/QUOTE] Very well noted. I will do that literally right now while the idea is fresh. Thank you! [B]EDIT:[/B] The internal referencing now states [b]ENGINE_type[/b], and all 95 configurations on the API Server reflect the changes in ways such as [B]"UNREAL"[/B], [B]"SOURCE"[/B], [B]"GOLDSOURCE"[/B], [B]"UNITY"[/B], and [B]"UNKNOWN"[/B]. Eventually new code will be able to handle this property and run the proper set of instructions to get everything operational. :) Thanks again.
Sorry, you need to Log In to post a reply to this thread.