コード例 #1
0
        /// <summary>
        /// Creates a new instance of the <see cref="ManiaNet.DedicatedServer.Controller.ServerController"/> class with the given XmlRpc client and config.
        /// </summary>
        /// <param name="xmlRpcClient">The client used to communicate with the server.</param>
        /// <param name="config">The configuration for the controller.</param>
        public ServerController([NotNull] IXmlRpcClient xmlRpcClient, [NotNull] ServerControllerConfig config)
        {
            this.xmlRpcClient = xmlRpcClient;
            this.xmlRpcClient.MethodResponse += xmlRpcClient_MethodResponse;
            this.xmlRpcClient.ServerCallback += xmlRpcClient_ServerCallback;

            Database = new SQLiteConnection("Data Source=" + config.DatabasePath + ";Version=3;");
            Database.Open();

            WebServicesClient = new CombiClient(config.WebServicesLogin, config.WebServicesPassword);

            Configuration = config;

            RegisterCommand("plugins", listPlugins);

            PlayerChat          += ServerController_PlayerChat;
            ChatInterfaceManager = new ChatInterfaceManager();
            ChatInterfaceManager.RegisterInterface("chat", new StandardChatInterface(this));
            ChatInterfaceManager.RegisterInterface("console", new ConsoleChatInterface());

            RecordsProviderManager = new RecordsProviderManager();
        }
コード例 #2
0
 private void ServerController_PlayerChat(ServerController sender, ManiaPlanetPlayerChat methodCall)
 {
     ChatInterfaceManager.Get(Configuration.DefaultChat).SendToAll(methodCall.Text, this.ClientsManager.GetClientInfo(methodCall.ClientLogin));
 }
コード例 #3
0
        private void callEvent(object serverCallback)
        {
            var methodCall = XDocument.Parse((string)serverCallback, LoadOptions.None).Root;

            if (methodCall == null)
            {
                return;
            }

            var methodNameElement = methodCall.Element("methodName");

            if (methodNameElement == null)
            {
                return;
            }

            //Swith to the right method name and call the event.
            switch (methodNameElement.Value)
            {
            case "ManiaPlanet.PlayerConnect":
                if (PlayerConnect != null)
                {
                    var playerConnectCall = new ManiaPlanetPlayerConnect();
                    if (playerConnectCall.ParseCallXml(methodCall))
                    {
                        PlayerConnect(this, playerConnectCall);
                    }
                }
                break;

            case "ManiaPlanet.PlayerDisconnect":
                if (PlayerDisconnect != null)
                {
                    var playerDisconnectCall = new ManiaPlanetPlayerDisconnect();
                    if (playerDisconnectCall.ParseCallXml(methodCall))
                    {
                        PlayerDisconnect(this, playerDisconnectCall);
                    }
                }
                break;

            case "ManiaPlanet.PlayerChat":
                var playerChatCall = new ManiaPlanetPlayerChat();
                if (playerChatCall.ParseCallXml(methodCall))
                {
                    if (!playerChatCall.Text.StartsWith("/"))
                    {
                        if (PlayerChat != null)
                        {
                            PlayerChat(this, playerChatCall);
                        }
                    }

                    var potentialCommand = (playerChatCall.Text.TrimStart('/') + " ").ToLowerInvariant();
                    var command          = registeredCommands.Where(cmd => potentialCommand.StartsWith(cmd.Key + " "));

                    if (command.Any())
                    {
                        try
                        {
                            command.Single().Value(playerChatCall);
                        }
                        catch     //TODO: Specify exception
                        {
                            ChatInterfaceManager.Get(Configuration.DefaultChat).SendToPlayer(
                                "The command [" + playerChatCall.Text.TrimStart('/') + "] was somehow not unique.",
                                ClientsManager.GetClientInfo(playerChatCall.ClientLogin));
                        }
                    }
                    else
                    {
                        ChatInterfaceManager.Get(Configuration.DefaultChat).SendToPlayer(
                            "The command [" + playerChatCall.Text.TrimStart('/') + "] couldn't be found.",
                            ClientsManager.GetClientInfo(playerChatCall.ClientLogin));
                    }
                }
                break;

            case "ManiaPlanet.PlayerManialinkPageAnswer":
                if (PlayerManialinkPageAnswer != null)
                {
                    var playerManialinkPageAnswerCall = new ManiaPlanetPlayerManialinkPageAnswer();
                    if (playerManialinkPageAnswerCall.ParseCallXml(methodCall))
                    {
                        PlayerManialinkPageAnswer(this, playerManialinkPageAnswerCall);
                    }
                }
                break;

            case "ManiaPlanet.Echo":
                if (Echo != null)
                {
                    var echoCall = new ManiaPlanetEcho();
                    if (echoCall.ParseCallXml(methodCall))
                    {
                        Echo(this, echoCall);
                    }
                }
                break;

            case "ManiaPlanet.ServerStart":
                if (ServerStart != null)
                {
                    var serverStartCall = new ManiaPlanetServerStart();
                    if (serverStartCall.ParseCallXml(methodCall))
                    {
                        ServerStart(this, serverStartCall);
                    }
                }
                break;

            case "ManiaPlanet.ServerStop":
                if (ServerStop != null)
                {
                    var serverStopCall = new ManiaPlanetServerStop();
                    if (serverStopCall.ParseCallXml(methodCall))
                    {
                        ServerStop(this, serverStopCall);
                    }
                }
                break;

            case "ManiaPlanet.BeginMatch":
                if (BeginMatch != null)
                {
                    var beginMatchCall = new ManiaPlanetBeginMatch();
                    if (beginMatchCall.ParseCallXml(methodCall))
                    {
                        BeginMatch(this, beginMatchCall);
                    }
                }
                break;

            case "ManiaPlanet.EndMatch":
                if (EndMatch != null)
                {
                    var endMatchCall = new ManiaPlanetEndMatch();
                    if (endMatchCall.ParseCallXml(methodCall))
                    {
                        EndMatch(this, endMatchCall);
                    }
                }
                break;

            case "ManiaPlanet.BeginMap":
                if (BeginMap != null)
                {
                    var beginMapCall = new ManiaPlanetBeginMap();
                    if (beginMapCall.ParseCallXml(methodCall))
                    {
                        BeginMap(this, beginMapCall);
                    }
                }
                break;

            case "ManiaPlanet.EndMap":
                if (EndMap != null)
                {
                    var endMapCall = new ManiaPlanetEndMap();
                    if (endMapCall.ParseCallXml(methodCall))
                    {
                        EndMap(this, endMapCall);
                    }
                }
                break;

            case "ManiaPlanet.StatusChanged":
                if (StatusChanged != null)
                {
                    var statusChangedCall = new ManiaPlanetStatusChanged();
                    if (statusChangedCall.ParseCallXml(methodCall))
                    {
                        StatusChanged(this, statusChangedCall);
                    }
                }
                break;

            case "TrackMania.PlayerCheckpoint":
                Console.WriteLine("Player drove through checkpoint.");
                if (PlayerCheckpoint != null)
                {
                    var playerCheckpointCall = new TrackManiaPlayerCheckpoint();
                    if (playerCheckpointCall.ParseCallXml(methodCall))
                    {
                        PlayerCheckpoint(this, playerCheckpointCall);
                    }
                }
                break;

            case "TrackMania.PlayerFinish":
                if (PlayerFinish != null)
                {
                    var playerFinishCall = new TrackManiaPlayerFinish();
                    if (playerFinishCall.ParseCallXml(methodCall))
                    {
                        PlayerFinish(this, playerFinishCall);
                    }
                }
                break;

            case "TrackMania.PlayerIncoherence":
                if (PlayerIncoherence != null)
                {
                    var playerIncoherenceCall = new TrackManiaPlayerIncoherence();
                    if (playerIncoherenceCall.ParseCallXml(methodCall))
                    {
                        PlayerIncoherence(this, playerIncoherenceCall);
                    }
                }
                break;

            case "ManiaPlanet.BillUpdated":
                if (BillUpdated != null)
                {
                    var billUpdatedCall = new ManiaPlanetBillUpdated();
                    if (billUpdatedCall.ParseCallXml(methodCall))
                    {
                        BillUpdated(this, billUpdatedCall);
                    }
                }
                break;

            case "ManiaPlanet.TunnelDataReceived":
                if (TunnelDataReceived != null)
                {
                    var tunnelDataReceivedCall = new ManiaPlanetTunnelDataReceived();
                    if (tunnelDataReceivedCall.ParseCallXml(methodCall))
                    {
                        TunnelDataReceived(this, tunnelDataReceivedCall);
                    }
                }
                break;

            case "ManiaPlanet.MapListModified":
                if (MapListModified != null)
                {
                    var mapListModifiedCall = new ManiaPlanetMapListModified();
                    if (mapListModifiedCall.ParseCallXml(methodCall))
                    {
                        MapListModified(this, mapListModifiedCall);
                    }
                }
                break;

            case "ManiaPlanet.PlayerInfoChanged":
                if (PlayerInfoChanged != null)
                {
                    var playerInfoChangedCall = new ManiaPlanetPlayerInfoChanged();
                    if (playerInfoChangedCall.ParseCallXml(methodCall))
                    {
                        PlayerInfoChanged(this, playerInfoChangedCall);
                    }
                }
                break;

            case "ManiaPlanet.VoteUpdated":
                if (VoteUpdated != null)
                {
                    var voteUpdatedCall = new ManiaPlanetVoteUpdated();
                    if (voteUpdatedCall.ParseCallXml(methodCall))
                    {
                        VoteUpdated(this, voteUpdatedCall);
                    }
                }
                break;

            case "ManiaPlanet.PlayerAlliesChanged":
                if (PlayerAlliesChanged != null)
                {
                    var playerAlliesChangedCall = new ManiaPlanetPlayerAlliesChanged();
                    if (playerAlliesChangedCall.ParseCallXml(methodCall))
                    {
                        PlayerAlliesChanged(this, playerAlliesChangedCall);
                    }
                }
                break;
            }
        }