//Initialize new Rcon connection to server. private static string StartRcon(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); SrvProcPair serverProcessPair = Arma3ServerUtility.FindServerProcessPairByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } if (serverProcessPair == null) { return("Failed to find running server process"); } try { if (serverProcessPair.RemoteConsole == null) { serverProcessPair.RemoteConsole = new Rcon.Rcon(server.RconParams.IPAddress, server.RconParams.Port, server.RconParams.Password); } serverProcessPair.RemoteConsole.SetRconEnabled(true); if (serverProcessPair.RemoteConsole.RconEnabled) { return("Rcon Started"); } return("Failed to start Rcon"); } catch (Exception e) { return("Failed to initialize Rcon Conncetion: " + e.Message); } }
public static bool StartServer(SrvProcPair serverProcessPair, string battlEyePath, out string result) { try { Arma3Server server = serverProcessPair.serverData; if (server == null) { result = "Server is not defined"; return(false); } //Refresh arma3server config file before restarting server. Arma3ServerConfigWriter.WriteConfigFile(server, appSettings); string RelativePath = appSettings.ArmaServersDataPath + '\\' + server.ServerID; Process p = Process.Start(appSettings.Arma3ServerExePath, "\"-port=" + server.GamePort + "\" \"-config=" + RelativePath + "\\serverconfig.cfg\"" + " \"-profiles=" + RelativePath + "\" \"-name=" + server.ServerProfileName + "\" \"-bepath=" + battlEyePath + "\""); serverProcessPair.proc = p; result = "Process started"; return(true); } catch (Exception e) { result = "Could not start process: " + e.Message; return(false); } }
//Send Rcon-Command to server. private static string SendRconCommand(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); SrvProcPair serverProcessPair = Arma3ServerUtility.FindServerProcessPairByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } if (serverProcessPair == null) { return("Failed to find running server process"); } string param; if (!FindRequestValue(request, "paramvalue", out param)) { return("ParameterValue not found"); } if (serverProcessPair.RemoteConsole == null) { return("Failed to send command. Rcon not initialized"); } if (!serverProcessPair.RemoteConsole.RconEnabled) { return("Failed to send command. Rcon is not enabled"); } serverProcessPair.RemoteConsole.Send(param); return("Rcon command-request sent"); }
public ServerListStorageObject(Process p, Arma3Server s, List <ScheduledEvent> evts) { if (p != null) { ProcessID = p.Id; ProcessName = p.ProcessName; } ServerData = s; Events = evts; }
//Get list of scheduled events from the server and return as a JSON. private static string GetServerSchedules(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } return(new JavaScriptSerializer().Serialize(server.Schedules.ServerEvents)); }
//Get schedules state private static string GetSchedulesEnabled(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } return(server.Schedules.Enabled.ToString()); }
//Get JSON string from Arma3Server class. public static bool ServerToJSON(Arma3Server server, out string result) { if (server != null) { result = new JavaScriptSerializer().Serialize(server); return(true); } result = "Server not defined"; return(false); }
//Create new Arma 3 Server and add to ServerList. Return id of newly created server. public static int CreateNewServer() { Arma3Server server = new Arma3Server(); server.ServerID = FindFreeID(); SrvProcPair serverProcessPair = new SrvProcPair(); serverProcessPair.serverData = server; ServerListAppend(serverProcessPair); return(server.ServerID); }
//Get Server Query class to JSON string. private static string GetQueryInfo(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } SourceQuery query = new SourceQuery(); return(new JavaScriptSerializer().Serialize(query.GetServerInfo(server.QueryParams.IPAddress, server.QueryParams.Port))); }
//Toggle schedules on/off private static string ToggleScheduleEnabled(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } server.Schedules.Enabled = !server.Schedules.Enabled; return("Server Scheduling set to " + server.Schedules.Enabled.ToString()); }
//Get Arma3Server class to JSON string. private static string GetServerInfo(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string result; Arma3ServerData.ServerToJSON(server, out result); return(result); }
//Find SrvParam member by Name from Arma3Server. public static SrvParam FindSrvParam(Arma3Server server, string paramName) { if (server == null) { return(null); } foreach (var item in typeof(Arma3Server).GetFields()) { if (item.Name == paramName && item.GetValue(server) is SrvParam) { return((SrvParam)item.GetValue(server)); } } return(null); }
//Update Server Game, Rcon or Query Port. private static string UpdatePort(List <string[]> request, int serverID, string portType) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string paramValue; int Port; if (!FindRequestValue(request, "paramvalue", out paramValue)) { return("ParameterValue not found"); } if (!int.TryParse(paramValue, out Port)) { return("Port was not Integer"); } if (Port < 0 || Port > 65535) { return("Port value out of range"); } if (portType == "GamePort") { server.GamePort = Port; return("Updated GamePort to " + Port.ToString()); } else if (portType == "QueryPort") { server.QueryParams.Port = Port; return("Updated QueryPort to " + Port.ToString()); } else if (portType == "RconPort") { server.RconParams.Port = Port; return("Updated RconPort to " + Port.ToString()); } return("PortType not found"); }
//Update Rcon Password. private static string UpdateRconPassword(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string paramValue; if (!FindRequestValue(request, "paramvalue", out paramValue)) { return("ParameterValue not found"); } server.RconParams.Password = paramValue; return("Rcon Password Updated"); }
//Update Server Profilename. private static string UpdateServerProfileName(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string paramValue; if (!FindRequestValue(request, "paramvalue", out paramValue)) { return("ParameterValue not found"); } server.ServerProfileName = paramValue; return("Server Profilename Updated"); }
//Add new scheduled event to server. private static string AddServerScheduledEvent(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string description, eventType, scheduleType, date, interval; if (!FindRequestValue(request, "description", out description)) { return("Event Description not found"); } if (!FindRequestValue(request, "eventtype", out eventType)) { return("Event Action not found"); } if (!FindRequestValue(request, "scheduletype", out scheduleType)) { return("Event Repeat type not found"); } if (!FindRequestValue(request, "date", out date)) { return("Event date not found"); } if (!FindRequestValue(request, "interval", out interval)) { return("Event repeat interval not found"); } EventType evtType = String2EventType(eventType); ScheduleType evtScType = String2ScheduleType(scheduleType); DateTime evtDate = String2DateTime(date); int evtInterval = 0; int.TryParse(interval, out evtInterval); server.Schedules.ServerEvents.Add(new ScheduledEvent(description, "", evtDate, evtType, evtScType, evtInterval)); return("Added new scheduled event"); }
//Update Arma3Server member / property. public static string UpdateConfigParam(int serverId, string paramName, object value) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverId); if (server == null) { return("Failed to update config parameter. Given ID didn't match any server."); } SrvParam param = FindSrvParam(server, paramName); if (param == null) { return("Failed to update config parameter. Given parameter not found"); } param.paramValue = value; //Serverlist saving return(paramName + " updated"); }
//Remove mission from missioncycle. private static string RemoveMissionFromCycle(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string param; if (!FindRequestValue(request, "param", out param)) { return("Parameter not found"); } int removedCount = server.Missions.RemoveSubclassesByName(param); return("Removed " + removedCount + " missions from missioncycle."); }
//Stop Rcon connection. private static string StopRcon(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); SrvProcPair serverProcessPair = Arma3ServerUtility.FindServerProcessPairByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } if (serverProcessPair == null) { return("Failed to find running server process"); } if (serverProcessPair.RemoteConsole != null) { serverProcessPair.RemoteConsole.SetRconEnabled(false); } return("Rcon is stopped"); }
//Update Arma3Server member/property -state. public static string UpdateConfigParamState(int serverId, string paramName, bool state) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverId); if (server == null) { return("Failed to update config parameter. Given ID didn't match any server."); } SrvParam param = FindSrvParam(server, paramName); if (param == null) { return("Failed to update config parameter. Given parameter not found"); } param.include = state; //Serverlist saving return(paramName + " state updated to " + state.ToString()); }
//Get Rcon Data private static string GetRconData(int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); SrvProcPair serverProcessPair = Arma3ServerUtility.FindServerProcessPairByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } if (serverProcessPair == null) { return("Failed to find running server process"); } if (serverProcessPair.RemoteConsole == null) { return("Failed to get data. Rcon is not enabled"); } return(new JavaScriptSerializer().Serialize(serverProcessPair.RemoteConsole.Handler.Data)); }
//Update Rcon or Query IP-Address. private static string UpdateIPAddress(List <string[]> request, int serverID, string addressType) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string paramValue; System.Net.IPAddress ipAddress; if (!FindRequestValue(request, "paramvalue", out paramValue)) { return("ParameterValue not found"); } if (System.Net.IPAddress.TryParse(paramValue, out ipAddress)) { if (addressType == "RconIP") { server.RconParams.IPAddress = ipAddress.ToString(); return("Updater Rcon IP-Address to " + ipAddress.ToString()); } if (addressType == "QueryIP") { server.QueryParams.IPAddress = ipAddress.ToString(); return("Updater Query IP-Address to " + ipAddress.ToString()); } return("IP-Address Target not found"); } return("Invalid IP-Address String"); }
//Add mission to missioncycle. private static string AddMissionToCycle(List <string[]> request, int serverID) { Arma3Server server = Arma3ServerUtility.FindArma3ServerByID(serverID); if (server == null) { return("Server with id " + serverID + " not found"); } string name, file, difficulty; if (!FindRequestValue(request, "missionname", out name) || !FindRequestValue(request, "missionfile", out file) || !FindRequestValue(request, "difficulty", out difficulty)) { return("Mission Name, FileName or Difficulty not defined"); } if (name.Length > 0 && file.Length > 0 && difficulty.Length > 0) // { server.Missions.SubClasses.Add(new Arma3MissionClass(name, file, difficulty)); return("New Mission Added."); } return("Mission Name, FileName or Difficulty not defined"); }
public static void WriteProfilesFile(Arma3Server server, Settings settings) { }
public static void WriteConfigFile(Arma3Server server, Settings settings) { CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); List <string> lines = new List <string>(); #region PopulateList foreach (var field in typeof(Arma3Server).GetFields()) { var p = field.GetValue(server); if (p is SrvParam) { SrvParam param = (SrvParam)p; if (param.include) { if (param.surroundWithQuotation) { lines.Add(param.paramName + " = \"" + param.paramValue + "\";"); } else { lines.Add(param.paramName + " = " + param.paramValue.ToString() + ";"); } } } else if (p is Arma3ClassObject) { StringBuilder sb = new StringBuilder(); AppendSubClasses((Arma3ClassObject)p, sb, 0); lines.Add(sb.ToString()); } } //Same for property fields foreach (var field in typeof(Arma3Server).GetProperties()) { var p = field.GetValue(server); if (!(p is SrvParam)) { continue; } SrvParam param = (SrvParam)p; if (param.include) { if (param.surroundWithQuotation) { lines.Add(param.paramName + " = \"" + param.paramValue + "\";"); } else { lines.Add(param.paramName + " = " + param.paramValue.ToString() + ";"); } } } #endregion StringBuilder configData = new StringBuilder(); configData.Append("// Automatically generated config file - ").AppendLine(DateTime.Now.ToString()).AppendLine("// With ArmaServerManager\r\n"); foreach (var item in lines) { configData.AppendLine(item); } string path = settings.ArmaServersDataPath + "/" + server.ServerID.ToString(); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } File.WriteAllText(path + "/serverconfig.cfg", configData.ToString()); Thread.CurrentThread.CurrentCulture = oldCulture; }