Пример #1
0
        void BreakServer(Server server)
        {
            var network = server.Network.Free;
            var cpu     = server.CPU.Free;
            var ram     = server.RAM.Free;

            if (
                _server.TryLockResource(server, server.Network, network) &&
                _server.TryLockResource(server, server.CPU, cpu) &&
                _server.TryLockResource(server, server.RAM, ram))
            {
                BreakedServers.Add(server.Id);
                _event.Fire(new Server_Break(server.Id));
            }
        }
Пример #2
0
        void OnCompleteProgress(Request_CompleteProgress e)
        {
            var req    = _request.Get(e.Id);
            var target = req.Target;

            switch (e.CompletedStatus)
            {
            case RequestStatus.Incoming: {
                if
                (
                    _server.TryLockResource(target, target.Network, req.WantedNetwork) &&
                    _server.TryLockResource(target, target.CPU, req.WantedCPU) &&
                    _server.TryLockResource(target, target.RAM, req.WantedRAM)
                )
                {
                    if (req.IsMainRequest)
                    {
                        _request.AddRelatedRequests(req);
                    }
                    req.ToProcessing(_rules.GetProcessTime(req.Target));
                    return;
                }
                _user.OnRequestFailed(req.Owner);
                req.ToOutgoing(_rules.GetNetworkTime(req.Target));
            }
            break;

            case RequestStatus.Processing: {
                if (_break.IsServerBreaked(target.Id))
                {
                    return;
                }
                _server.ReleaseResource(target, target.CPU, req.WantedCPU);
                _server.ReleaseResource(target, target.RAM, req.WantedRAM);
            }
            break;
            }
        }