예제 #1
0
        //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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        //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;
 }
예제 #5
0
        //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));
        }
예제 #6
0
        //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());
        }
예제 #7
0
        //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);
        }
예제 #8
0
        //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);
        }
예제 #9
0
        //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)));
        }
예제 #10
0
        //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());
        }
예제 #11
0
        //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);
        }
예제 #12
0
        //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);
        }
예제 #13
0
        //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");
        }
예제 #14
0
        //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");
        }
예제 #15
0
        //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");
        }
예제 #16
0
        //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");
        }
예제 #17
0
        //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");
        }
예제 #18
0
        //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.");
        }
예제 #19
0
        //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");
        }
예제 #20
0
        //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());
        }
예제 #21
0
        //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));
        }
예제 #22
0
        //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");
        }
예제 #23
0
        //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");
        }
예제 #24
0
 public static void WriteProfilesFile(Arma3Server server, Settings settings)
 {
 }
예제 #25
0
        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;
        }