コード例 #1
0
        private void Init()
        {
            try
            {
                using (var redis = ClientsManager.GetReadOnlyClient())
                {
                    startedAt         = Stopwatch.StartNew();
                    serverTimeAtStart = IsSentinelSubscription
                        ? DateTime.UtcNow
                        : redis.GetServerTime();
                }
            }
            catch (Exception ex)
            {
                if (OnError != null)
                {
                    OnError(ex);
                }
            }

            DisposeHeartbeatTimer();

            if (HeartbeatInterval != null)
            {
                heartbeatTimer = new Timer(SendHeartbeat, null,
                                           TimeSpan.FromMilliseconds(0), HeartbeatInterval.Value);
            }

            Interlocked.CompareExchange(ref lastHeartbeatTicks, DateTime.UtcNow.Ticks, lastHeartbeatTicks);

            if (OnInit != null)
            {
                OnInit();
            }
        }
コード例 #2
0
ファイル: Clients.aspx.cs プロジェクト: msalah85/c-a-r-s
    public static object SaveClient(Client scParam, string masterId)
    {
        object data = new { };

        Client item = new Client()
        {
            ClientID = scParam.ClientID, full_name = scParam.full_name, phone = scParam.phone, phone2 = scParam.phone2, user_name = scParam.user_name, user_password = scParam.user_password, countryCode = scParam.countryCode, countryCode2 = scParam.countryCode2, user_type = scParam.user_type, send_sms = scParam.send_sms, active = true, send_email = true, date_entered = DateTime.UtcNow, Notes = scParam.Notes
        };

        int?masterID = string.IsNullOrEmpty(masterId) ? null : (Int32?)Convert.ToInt32(masterId);

        int savedID = new ClientsManager().SaveItem(item, masterID);

        if ((item.full_name != null && item.user_name != null) || savedID > 0)
        {
            data = new
            {
                Status  = true,
                Id      = savedID,
                Message = Resources.AdminResources_ar.SuccessSave
            };
        }
        else
        {
            data = new { Status = false, Message = Resources.AdminResources_ar.ErrorSave, Id = 0 }
        };


        return(data);
    }
コード例 #3
0
        public void Stop()
        {
            if (Interlocked.CompareExchange(ref status, 0, 0) == Status.Disposed)
            {
                throw new ObjectDisposedException("RedisPubSubServer has been disposed");
            }

            if (Interlocked.CompareExchange(ref status, Status.Stopping, Status.Started) == Status.Started)
            {
                Log.Debug("Stopping RedisPubSubServer...");

                //Unblock current bgthread by issuing StopCommand
                try
                {
                    using (var redis = ClientsManager.GetClient())
                    {
                        Interlocked.CompareExchange(ref doOperation, Operation.Stop, doOperation);
                        Channels.Each(x =>
                                      redis.PublishMessage(x, Operation.ControlCommand));
                    }
                }
                catch (Exception ex)
                {
                    if (this.OnError != null)
                    {
                        this.OnError(ex);
                    }
                    Log.Warn("Could not send STOP message to bg thread: " + ex.Message);
                }
            }
        }
コード例 #4
0
        private void NotifyAllSubscribers(string commandType = null)
        {
            var msg = ControlCommand.Control;

            if (commandType != null)
            {
                msg += ":" + commandType;
            }

            try
            {
                using (var redis = ClientsManager.GetClient())
                {
                    foreach (var channel in Channels)
                    {
                        redis.PublishMessage(channel, msg);
                    }
                }
            }
            catch (Exception ex)
            {
                if (this.OnError != null)
                {
                    this.OnError(ex);
                }
                Log.Warn("Could not send '{0}' message to bg thread: {1}".Fmt(msg, ex.Message));
            }
        }
コード例 #5
0
 public BaseViewModel()
 {
     _classesManager  = new ClassesManager();
     _clientsManager  = new ClientsManager();
     _roomsManager    = new RoomsManager();
     _workersManager  = new WorkersManager();
     _workPlanManager = new WorkPlanManager();
 }
コード例 #6
0
        public override Packet OnPacketReceive(Packet receivedPacket)
        {
            FormManager.gameView.SetDrawing((receivedPacket as ClientSendPointsPacket).Points);

            ClientsManager.SendPacketToEveryClients(receivedPacket);

            return(new ServerResponsePacket(NetworkError.None));
        }
コード例 #7
0
ファイル: AppContext.cs プロジェクト: Adel-dz/Hub
 static AppContext()
 {
     m_logManager     = new Log.LogManager();
     m_tableManager   = new TableManager();
     m_settings       = new Settings();
     m_accessPath     = new DataAccessPath();
     m_datumFactory   = new DataRowFactory();
     m_clientsManager = new ClientsManager();
 }
コード例 #8
0
 public ClientsViewModel()
 {
     _clientsManager     = GetClientsManager();
     AddClientCommand    = new BaseCommand(AddClient);
     DeleteClientCommand = new BaseCommand(DeleteClient);
     SaveCommand         = new BaseCommand(SaveChanges);
     CancelCommand       = new BaseCommand(Cancel);
     RefreshClients();
 }
コード例 #9
0
ファイル: Client.cs プロジェクト: zoukidev/Mangalys
        public void Broadcast(Message message)
        {
            IEnumerable <Client> clients = ClientsManager.FindClientsForBroadcasting(this);

            foreach (Client client in clients)
            {
                client.Send(message);
            }
        }
コード例 #10
0
 public ClientsController(
     SiteManager siteManager,
     ClientsManager clientsManager,
     IStringLocalizer <CloudscribeIntegration> localizer
     )
 {
     this.siteManager    = siteManager;
     this.clientsManager = clientsManager;
     sr = localizer;
 }
コード例 #11
0
 public ClientsController(
     SiteManager siteManager,
     ClientsManager clientsManager,
     IStringLocalizer <CloudscribeIds4Resources> localizer
     )
 {
     this.siteManager    = siteManager;
     this.clientsManager = clientsManager;
     sr = localizer;
 }
コード例 #12
0
 public void ConnectEx()
 {
     Listener listener1 = new Listener(endPoint);
     Listener listener2 = new Listener(endPoint);
     ClientsManager clientManager1 = new ClientsManager();
     ClientsManager clientManager2 = new ClientsManager();
     Server server1 = new Server(listener1, clientManager1);
     Server server2 = new Server(listener2, clientManager2);
     server1.Start();
     server2.Start();
     Thread.Sleep(1000);
 }
コード例 #13
0
        private void OnClientDisconnect(Socket socket)
        {
            Network.Client client = ClientsManager.Find(socket);

            if (client != null)
            {
                ClientsManager.Clients.Remove(client);

                FormDispatcher.RefreshList(ClientsManager.Clients.ToArray());
                FormDispatcher.AppendLog("Un Utilisateur se déconnecte" + Environment.NewLine);
            }
        }
コード例 #14
0
        public TestManager(ServerTest test)
        {
            this.currentTest = test;
            clientsManager   = new ClientsManager();
            clientsManager.ReceivedMessageFromClient += ClientsManagerOnReceivedMessageFromClient;

            if (!Directory.Exists(test.HandoverDirectory))
            {
                Directory.CreateDirectory(test.HandoverDirectory);
            }

            clientsManager.Start();
        }
コード例 #15
0
        public IHttpActionResult Get(string id)
        {
            log.Debug("begin");
            ClientsManager clientsmanager = new ClientsManager();
            Client         cli            = clientsmanager.GetById(id);

/*
 *          if (cli == null)
 *              return Ok(default(Client));
 */
            log.Debug("end");
            return(Ok(cli));
        }
コード例 #16
0
        private void Init()
        {
            using (var redis = ClientsManager.GetReadOnlyClient())
            {
                serverTimeAtStart = redis.GetServerTime();
                startedAt         = Stopwatch.StartNew();
            }

            if (OnInit != null)
            {
                OnInit();
            }
        }
コード例 #17
0
        public IHttpActionResult GetByName(string name)
        {
            log.Debug("begin");
            ClientsManager clientsmanager = new ClientsManager();
            Client         cli            = clientsmanager.GetByName(name);

            if (cli == null)
            {
                return(NotFound());
            }

            log.Debug("end");
            return(Ok(cli));
        }
コード例 #18
0
        public void ClientFullDataEmpty()
        {
            Listener listener = new Listener(endPoint);
            ClientsManager clientsManager = new ClientsManager();
            Server server = new Server(listener, clientsManager);
            server.Start();

            protocol.Connect(endPoint, ref desktopSocket);
            protocol.SendObject(new Command(Command.Commands.FullData, string.Empty), desktopSocket);
            Command com = protocol.ReadObject(desktopSocket, typeof(Command)) as Command;

            server.Stop();
            Assert.AreEqual(0, com.ValuesList.Count);
        }
コード例 #19
0
        protected override object Run(GetEntryTypes request)
        {
            var response = new GetEntryTypesResponse();

            using (var redis = ClientsManager.GetClient())
            {
                foreach (var key in request.Keys)
                {
                    var keyType = redis.GetEntryType(key);
                    response.KeyTypes.Add(new KeyValuePair(key, keyType.ToString()));
                }
            }

            return(response);
        }
コード例 #20
0
        public void AddClientConnect()
        {
            Listener listener = new Listener(endPoint);
            ClientsManager clientManager = new ClientsManager();
            listener.NewConnection += clientManager.AddClient;
            listener.Start();
            clientManager.Start();

            protocol.Connect(endPoint, ref desktopSocket);

            Thread.Sleep(2000);
            clientManager.Stop();
            listener.Stop();
            Assert.Pass();
        }
コード例 #21
0
        protected override object Run(FlushDb request)
        {
            if (request.Db == 0)
            {
                RedisNativeExec(r => r.FlushDb());
            }
            else
            {
                using (var redisClient = ClientsManager.GetClient())
                {
                    redisClient.Db = request.Db;
                    redisClient.FlushDb();
                }
            }

            return(new FlushDbResponse());
        }
コード例 #22
0
ファイル: ClientsView.aspx.cs プロジェクト: msalah85/Tundra
    private void ShowClientInformation(int Id)
    {
        var result = new ClientsManager().GetClientDetails(Id);

        if (result != null)
        {
            //hfID.Value = result.ClientID.ToString();
            txtEmail.Text       = result.ClientEmail;
            txtNameS.Text       = result.ClientName;
            txtUsername.Text    = result.ClientUsername;
            txtPassword.Text    = result.ClientPassword;
            txtPhone.Text       = result.ClientPhone;
            txtFax.Text         = result.ClientFax;
            txtShortdesc.Text   = result.ClientDesc;
            cbActive.Checked    = (bool)result.Active;
            cbActiveSMS.Checked = result.SMSActive != null ? (bool)result.SMSActive : true;

            txtPriority.Text       = result.Priority.ToString();
            txtOpeningBalance.Text = result.OpeningBalance.ToString();
        }
    }
コード例 #23
0
        public override Packet OnPacketReceive(Packet receivedPacket)
        {
            ClientSendChatMessageEventPacket p = (receivedPacket as ClientSendChatMessageEventPacket);

            string wordToFind = NetworkingHelper.GetInstance().Server.Room.Word;

            if (p.Message.RefactorText() == wordToFind.RefactorText())
            {
                //Show to everyone that he found the word
                p.Message = $"{p.Time.ToShortTimeString()} : {p.Sender} a trouvé le mot";

                ScoreManager.GetInstance().PlayerFoundWord(p.Sender, p.Time);
            }

            EventsManager.OnChatMessageReceive?.Invoke(new Objects.EventArgs.OnChatMessageReceiveEventArgs(
                                                           p.Sender,
                                                           p.Message,
                                                           p.Time)
                                                       );

            ClientsManager.SendPacketToEveryClients(receivedPacket);

            return(new ServerResponsePacket(NetworkError.None));
        }
コード例 #24
0
        public void RemoveClient()
        {
            Listener listener = new Listener(endPoint);
            ClientsManager clientManager = new ClientsManager();
            Server server = new Server(listener, clientManager);
            server.Start();

            protocol.Connect(endPoint, ref desktopSocket);
            //не подтягивается Json.dll
            protocol.SendObject(new Command(Command.Commands.Exit, string.Empty), desktopSocket);

            Command command = protocol.ReadObject(desktopSocket, typeof(Command)) as Command;
            server.Stop();
            Assert.AreEqual("Confirm", command.CurrentCommand);
        }
コード例 #25
0
        private void RunLoop()
        {
            if (Interlocked.CompareExchange(ref status, Status.Started, Status.Starting) != Status.Starting)
            {
                return;
            }
            Interlocked.Increment(ref timesStarted);

            try
            {
                //RESET
                while (Interlocked.CompareExchange(ref status, 0, 0) == Status.Started)
                {
                    using (var redis = ClientsManager.GetReadOnlyClient())
                    {
                        masterClient = redis;

                        //Record that we had a good run...
                        Interlocked.CompareExchange(ref noOfContinuousErrors, 0, noOfContinuousErrors);

                        using (var subscription = redis.CreateSubscription())
                        {
                            subscription.OnUnSubscribe = HandleUnSubscribe;

                            subscription.OnMessage = (channel, msg) =>
                            {
                                if (string.IsNullOrEmpty(msg))
                                {
                                    return;
                                }

                                var ctrlMsg = msg.SplitOnFirst(':');
                                if (ctrlMsg[0] == ControlCommand.Control)
                                {
                                    var op = Interlocked.CompareExchange(ref doOperation, Operation.NoOp, doOperation);

                                    var msgType = ctrlMsg.Length > 1
                                        ? ctrlMsg[1]
                                        : null;

                                    if (OnControlCommand != null)
                                    {
                                        OnControlCommand(msgType ?? Operation.GetName(op));
                                    }

                                    switch (op)
                                    {
                                    case Operation.Stop:
                                        if (Log.IsDebugEnabled)
                                        {
                                            Log.Debug("Stop Command Issued");
                                        }

                                        Interlocked.CompareExchange(ref status, Status.Stopping, Status.Started);
                                        try
                                        {
                                            if (Log.IsDebugEnabled)
                                            {
                                                Log.Debug("UnSubscribe From All Channels...");
                                            }

                                            subscription.UnSubscribeFromAllChannels();     //Un block thread.
                                        }
                                        finally
                                        {
                                            Interlocked.CompareExchange(ref status, Status.Stopped, Status.Stopping);
                                        }
                                        return;

                                    case Operation.Reset:
                                        subscription.UnSubscribeFromAllChannels();     //Un block thread.
                                        return;
                                    }

                                    switch (msgType)
                                    {
                                    case ControlCommand.Pulse:
                                        Pulse();
                                        break;
                                    }
                                }
                                else
                                {
                                    OnMessage(channel, msg);
                                }
                            };

                            //blocks thread
                            if (ChannelsMatching != null && ChannelsMatching.Length > 0)
                            {
                                subscription.SubscribeToChannelsMatching(ChannelsMatching);
                            }
                            else
                            {
                                subscription.SubscribeToChannels(Channels);
                            }

                            masterClient = null;
                        }
                    }
                }

                if (OnStop != null)
                {
                    OnStop();
                }
            }
            catch (Exception ex)
            {
                lastExMsg = ex.Message;
                Interlocked.Increment(ref noOfErrors);
                Interlocked.Increment(ref noOfContinuousErrors);

                if (Interlocked.CompareExchange(ref status, Status.Stopped, Status.Started) != Status.Started)
                {
                    Interlocked.CompareExchange(ref status, Status.Stopped, Status.Stopping);
                }

                if (OnStop != null)
                {
                    OnStop();
                }

                if (this.OnError != null)
                {
                    this.OnError(ex);
                }
            }

            if (AutoRestart && Interlocked.CompareExchange(ref status, 0, 0) != Status.Disposed)
            {
                if (WaitBeforeNextRestart != null)
                {
                    Thread.Sleep(WaitBeforeNextRestart.Value);
                }

                Start();
            }
        }
コード例 #26
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;
            }
        }
コード例 #27
0
        private void loadPlugins()
        {
            Console.WriteLine("Loading Plugins...");

            var pluginTypes = PluginLoader.LoadPluginsFromFolders <ControllerPlugin>(Configuration.PluginFolders);

            var pluginInstances = PluginLoader.InstanciatePlugins <ControllerPlugin>(pluginTypes.Append(typeof(LocalRecordsProvider))).ToList();

            Console.WriteLine();
            ControllerPlugin manialinkDisplayManager = null;

            try
            {
                manialinkDisplayManager = pluginInstances.SingleOrDefault(plugin => typeof(IManialinkDisplayManager).IsAssignableFrom(plugin.GetType()));
            }
            catch
            {
                Console.WriteLine("Multiple custom Manialink Display Managers found, using default one.");
            }

            if (manialinkDisplayManager != null)
            {
                Console.WriteLine("Using custom Manialink Display Manager: " + PluginBase.GetName(manialinkDisplayManager.GetType()) + " ("
                                  + PluginBase.GetIdentifier(manialinkDisplayManager.GetType()) + ")");
                ManialinkDisplayManager = (IManialinkDisplayManager)manialinkDisplayManager;
            }
            else
            {
                Console.WriteLine("No custom Manialink Display Manager found, using default one.");

                manialinkDisplayManager = new ManialinkDisplayManager();
                if (manialinkDisplayManager.Load(this))
                {
                    pluginInstances.Add(manialinkDisplayManager);
                    ManialinkDisplayManager = (IManialinkDisplayManager)manialinkDisplayManager;
                }
            }

            Console.WriteLine();
            ControllerPlugin clientsManager = null;

            try
            {
                clientsManager = pluginInstances.SingleOrDefault(plugin => typeof(IClientsManager).IsAssignableFrom(plugin.GetType()));
            }
            catch
            {
                Console.WriteLine("Multiple custom Clients Managers found, using default one.");
            }

            if (clientsManager != null)
            {
                Console.WriteLine("Using custom Clients Manager: " + PluginBase.GetName(clientsManager.GetType()) + " ("
                                  + PluginBase.GetIdentifier(clientsManager.GetType()) + ")");
                ClientsManager = (IClientsManager)clientsManager;
            }
            else
            {
                Console.WriteLine("No custom Clients Manager found, using default one.");

                clientsManager = new ClientsManager();
                if (clientsManager.Load(this))
                {
                    pluginInstances.Add(clientsManager);
                    ClientsManager = (IClientsManager)clientsManager;
                }
            }

            plugins = pluginInstances.Select(plugin =>
            {
                Console.WriteLine(PluginBase.GetName(plugin.GetType()) + " ...");

                var success = plugin.Load(this);
                Console.WriteLine(success ? "OK" : "Failed");

                return(new { Plugin = plugin, Success = success });
            })
                      .Where(loadedPlugin => loadedPlugin.Success)
                      .Select(loadedPlugin => loadedPlugin.Plugin)
                      .ToDictionary(plugin => PluginBase.GetIdentifier(plugin.GetType()).Replace(' ', '_').Replace('$', '_').ToLower());

            Console.WriteLine("Completed Loading Plugins.");
        }
コード例 #28
0
 public override Packet OnPacketReceive(Packet receivedPacket)
 {
     ClientsManager.SendPacketToEveryClients(receivedPacket);
     return(new ServerResponsePacket(NetworkError.None));
 }
コード例 #29
0
        public Server()
        {
            ENet.Library.Initialize();
            ClientsManager clients = new ClientsManager();

            DatabaseManager.OnDatabaseTick += () =>
            {
                List <CharacterInfo> characters = CharactersManager.Instance.characters.Values.ToList();

                if (characters.Count != 0)
                {
                    List <Character> charactersForUpdate = new List <Character>();

                    foreach (var player in characters)
                    {
                        if (player.Client != null)
                        {
                            charactersForUpdate.Add(player.Character);
                        }
                    }

                    if (charactersForUpdate.Count != 0)
                    {
                        CharacterDB.SaveCharacters(charactersForUpdate);

                        //ServerLogger.Log(null, "Updated database | Query time: " + (Server.Time - startTime).ToString(), LoggingLevel.PROD);
                    }
                }
            };

            using (Host server = new Host())
            {
                Console.WriteLine("Game Server started...");
                Address address = new Address();
                address.SetIP("127.0.0.1");
                address.Port = 2601;
                server.Create(address, 100);

                Event netEvent;

                while (!Console.KeyAvailable)
                {
                    bool polled = false;

                    while (!polled)
                    {
                        if (server.CheckEvents(out netEvent) <= 0)
                        {
                            if (server.Service(15, out netEvent) <= 0)
                            {
                                break;
                            }

                            polled = true;
                        }

                        switch (netEvent.Type)
                        {
                        case EventType.None:
                            break;

                        case EventType.Connect:
                            Console.WriteLine("Client connected - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP);

                            CharacterInfo info = CharactersManager.Instance.AddCharacter(new CharacterInfo()
                            {
                                Character = new Hero()
                                {
                                    Position = new System.Numerics.Vector3(1786, 3, 1769)
                                },
                                ZoneId = 0
                            });

                            GameClient c = new GameClient()
                            {
                                Peer          = netEvent.Peer,
                                CharacterInfo = info
                            };

                            c.CharacterInfo.Client = c;
                            ClientsManager.Instance.clients.Add(netEvent.Peer.ID, c);
                            break;

                        case EventType.Disconnect:
                            Console.WriteLine("Client disconnected - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP);


                            GameClient clientToRemove = (GameClient)ClientsManager.Instance.clients[netEvent.Peer.ID];
                            CharacterDB.SaveCharacters(new List <Character>()
                            {
                                clientToRemove.CharacterInfo.Character
                            });
                            ClientsManager.Instance.clients.Remove(netEvent.Peer.ID);
                            CharactersManager.Instance.RemoveCharacter(clientToRemove.CharacterInfo);
                            break;

                        case EventType.Timeout:
                            Console.WriteLine("Client timeout - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP);
                            break;

                        case EventType.Receive:
                            //Console.WriteLine("Packet received from - ID: " + netEvent.Peer.ID + ", IP: " + netEvent.Peer.IP + ", Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length);
                            byte[] buffer = new byte[1024];
                            netEvent.Packet.CopyTo(buffer);

                            GamePacketsManager.ReadBytes(ClientsManager.Instance.clients[netEvent.Peer.ID], buffer, netEvent.Packet.Length);

                            netEvent.Packet.Dispose();
                            break;
                        }
                    }
                }

                server.Flush();
            }
        }
コード例 #30
0
        /// <summary>
        /// This function is called when the service starts.
        /// The functions initialized the sercice components and starts listning to the folders.
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            // Update the service state to Start Pending.
            ServiceStatus serviceStatus = new ServiceStatus();

            serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
            serviceStatus.dwWaitHint     = 100000;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);

            // What the function really does
            string sourceDirectoriesKey = "Handler";
            string outPutDirKey         = "OutputDir";
            string logSourceNameKey     = "SourceName";
            string logNameKey           = "LogName";
            string thumbnailSizeKey     = "ThumbnailSize";

            // Define the evant log, messages from this application will be writeen to.
            eventLog1 = new System.Diagnostics.EventLog();
            if (!System.Diagnostics.EventLog.SourceExists(this.getAppConfigValue(logSourceNameKey)))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    this.getAppConfigValue(logSourceNameKey), this.getAppConfigValue(logNameKey));
            }
            eventLog1.Source = this.getAppConfigValue(logSourceNameKey);
            eventLog1.Log    = this.getAppConfigValue(logNameKey);

            // Defime the service's timer
            this.timer          = new System.Timers.Timer();
            this.timer.Interval = 60000; // 60 seconds
            this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);

            // Define the logger
            this.logging = new LoggingService();
            // Regidter the the logging model event o when a part of the program
            // send a request to the logging model in order to write a log.
            // the funtion writeLog will be invoked and it will write the massage to the event viewer.
            this.logging.MessageRecieved += this.writeLog;

            // Define the logging buffer helps to send logs to the clients
            LogingBuffer logsBuffer = new LogingBuffer();

            this.logging.MessageRecieved += logsBuffer.AddLog;

            // Define the ImageModel
            int size = int.Parse(this.getAppConfigValue(thumbnailSizeKey));

            this.modal = new ImageServiceModal(this.getAppConfigValue(outPutDirKey), size);

            // Define the controler
            this.controller = new ImageController(this.modal, logsBuffer, logging);

            // Define the ClientsManagget that will manage the coimunication with the diffrent clients.
            ClientsManager managger = new ClientsManager(this.controller, this.logging);

            // Define the cominication server
            this.comServer = new ComunicationServer("127.0.0.1", 8000, managger, this.logging);

            // Define the server
            string directories = this.getAppConfigValue(sourceDirectoriesKey);

            string[] directoryArray = directories.Split(';');
            this.m_imageServer = new ImageServer(this.logging, this.controller, directoryArray, comServer, managger);

            eventLog1.WriteEntry("In OnStart");
            this.timer.Start();

            // Update the service state to Running.
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }
コード例 #31
0
 public void Setup()
 {
     endPoint = new IPEndPoint(IPAddress.Parse("192.168.56.1"), 8008);
     listener = new Listener(endPoint);
     clientManager = new ClientsManager();
     protocol = new DesktopClient.JsonProtocol();
     desktopSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 }
コード例 #32
0
ファイル: Server.cs プロジェクト: vit2005/Multitier-Project
 public Server(Listener listener, ClientsManager clientManager)
 {
     this.listener = listener;
     this.clientManager = clientManager;
     listener.NewConnection += clientManager.AddClient;
 }
コード例 #33
0
 private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
 {
     NetworkManager.StopServers();
     ClientsManager.UnloadAll();
 }
コード例 #34
0
        private void RunLoop()
        {
            if (Interlocked.CompareExchange(ref status, Status.Started, Status.Starting) != Status.Starting)
            {
                return;
            }
            Interlocked.Increment(ref timesStarted);

            try
            {
                //RESET
                while (Interlocked.CompareExchange(ref status, 0, 0) == Status.Started)
                {
                    using (var redis = ClientsManager.GetReadOnlyClient())
                    {
                        masterClient = redis;

                        //Record that we had a good run...
                        Interlocked.CompareExchange(ref noOfContinuousErrors, 0, noOfContinuousErrors);

                        using (var subscription = redis.CreateSubscription())
                        {
                            subscription.OnUnSubscribe = HandleUnSubscribe;

                            subscription.OnMessage = (channel, msg) =>
                            {
                                if (msg == Operation.ControlCommand)
                                {
                                    var op = Interlocked.CompareExchange(ref doOperation, Operation.NoOp, doOperation);
                                    switch (op)
                                    {
                                    case Operation.Stop:
                                        Log.Debug("Stop Command Issued");

                                        if (Interlocked.CompareExchange(ref status, Status.Stopped, Status.Started) != Status.Started)
                                        {
                                            Interlocked.CompareExchange(ref status, Status.Stopped, Status.Stopping);
                                        }

                                        Log.Debug("UnSubscribe From All Channels...");
                                        subscription.UnSubscribeFromAllChannels();     //Un block thread.
                                        return;

                                    case Operation.Reset:
                                        subscription.UnSubscribeFromAllChannels();     //Un block thread.
                                        return;
                                    }
                                }

                                if (!string.IsNullOrEmpty(msg))
                                {
                                    OnMessage(channel, msg);
                                }
                            };

                            subscription.SubscribeToChannels(Channels); //blocks thread
                            masterClient = null;
                        }
                    }
                }

                if (OnStop != null)
                {
                    OnStop();
                }
            }
            catch (Exception ex)
            {
                lastExMsg = ex.Message;
                Interlocked.Increment(ref noOfErrors);
                Interlocked.Increment(ref noOfContinuousErrors);

                if (Interlocked.CompareExchange(ref status, Status.Stopped, Status.Started) != Status.Started)
                {
                    Interlocked.CompareExchange(ref status, Status.Stopped, Status.Stopping);
                }

                if (OnStop != null)
                {
                    OnStop();
                }

                if (this.OnError != null)
                {
                    this.OnError(ex);
                }

                if (KeepAliveRetryAfterMs != null)
                {
                    Thread.Sleep(KeepAliveRetryAfterMs.Value);

                    if (Interlocked.CompareExchange(ref status, 0, 0) != Status.Disposed)
                    {
                        Start();
                    }
                }
            }
        }
コード例 #35
0
 private void Awake()
 {
     Instance = this;
 }
コード例 #36
0
        public override Packet OnPacketReceive(Packet receivedPacket)
        {
            NetworkError error = ClientsManager.RemoveClient((receivedPacket as ClientUnregisterPacket).Client);

            return(new ServerResponsePacket(error));
        }