예제 #1
0
        public virtual string Title()
        {
            var title = "Partial: ";


            if (Calls.Any())
            {
                title += Calls.Select(x => x.Description).Join(", ");
                return(title);
            }

            if (Tags.Contains("ActionlessView"))
            {
                var views = Output.Media().Select(x => x.Writer).OfType <IViewWriter>().Select(x => Description.For(x.View).Title);
                return("View(s): " + views.Join(""));
            }

            if (HasOutput() && Output.Media().Any())
            {
                return(Output.Media().Select(x => Description.For(x.Writer).Title).Join(", "));
            }

            if (InputType() != null)
            {
                return("Handler for " + InputType().FullName);
            }

            return("BehaviorChain " + UniqueId);
        }
예제 #2
0
        public override string ToString()
        {
            if (Calls.Any())
            {
                return(Calls.Select(x => x.Description).Join(", "));
            }

            return(this.Select(x => x.Description).Join(" --> "));
        }
예제 #3
0
        public override string ToString()
        {
            if (Route != null)
            {
                var description = Route.Pattern;
                if (Route.AllowedHttpMethods.Any())
                {
                    description += " (" + Route.AllowedHttpMethods.Join(", ") + ")";
                }

                return description;
            }

            if (Calls.Any())
            {
                return Calls.Select(x => x.Description).Join(", ");
            }

            return this.Select(x => x.Description).Join(" --> ");
        }
예제 #4
0
파일: Map.cs 프로젝트: rio900/voins
 /// <summary>
 /// Проверка можно ли в ячейку переместится юниту
 /// </summary>
 /// <param name="x">Координата х</param>
 /// <param name="y">Координата у</param>
 /// <param name="return">можно ли в ячейку ходить</param>
 public bool AllowMoveUnit(IUnit unit, int x, int y)
 {
     ///Ищем, есть ли такая ячейка
     if (Calls.Any(p => p.IndexLeft == x && p.IndexTop == y))
     {
         ///Берем ячейку
         var call = Calls.Single(p => p.IndexLeft == x && p.IndexTop == y);
         ///Проверяем или ячейка не занята и не используется(тоесть в нее кто то ходит но еще не походил)
         if (!call.Using && !call.Used && !call.Block)
         {
             return(true);
         }
         else if (call.Used && !call.Block && !call.Using && unit.Invisibility)
         {
             if (call.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.UnitBlock))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
예제 #5
0
 public bool IsAsynchronous()
 {
     return Calls.Any(x => x.IsAsync);
 }
예제 #6
0
        public void Calling(object sender, ICallEventArgs e)
        {
            if ((Subscribers.ContainsKey(e.TargetNumber) && e.TargetNumber != e.Number) || e is EventOfEndCallArgs)
            {
                CallInfo callInfo = null;
                Port     targetPort;
                Port     port;
                int      number       = 0;
                int      targetNumber = 0;
                if (e is EventOfEndCallArgs)
                {
                    var callListFirst = Calls.First(x => x.Id.Equals(e.Id));
                    if (callListFirst.Number == e.Number)
                    {
                        targetPort   = Subscribers[callListFirst.TargetNumber].Item1;
                        port         = Subscribers[callListFirst.Number].Item1;
                        number       = callListFirst.Number;
                        targetNumber = callListFirst.TargetNumber;
                    }
                    else
                    {
                        port         = Subscribers[callListFirst.TargetNumber].Item1;
                        targetPort   = Subscribers[callListFirst.Number].Item1;
                        targetNumber = callListFirst.Number;
                        number       = callListFirst.TargetNumber;
                    }
                }
                else
                {
                    targetPort   = Subscribers[e.TargetNumber].Item1;
                    port         = Subscribers[e.Number].Item1;
                    targetNumber = e.TargetNumber;
                    number       = e.Number;
                }
                if (targetPort.State == States.StateOfPort.Connect && port.State == StateOfPort.Connect)
                {
                    var portContract       = Subscribers[number];
                    var targetPortContract = Subscribers[targetNumber];

                    if (e is EventOfAnswerArgs)
                    {
                        var answerArgs = (EventOfAnswerArgs)e;

                        if (!answerArgs.Id.Equals(Guid.Empty) && Calls.Any(x => x.Id.Equals(answerArgs.Id)))
                        {
                            callInfo = Calls.First(x => x.Id.Equals(answerArgs.Id));
                        }

                        if (callInfo != null)
                        {
                            targetPort.AnswerCall(answerArgs.Number, answerArgs.TargetNumber, answerArgs.StateOfCall, callInfo.Id);
                        }
                        else
                        {
                            targetPort.AnswerCall(answerArgs.Number, answerArgs.TargetNumber, answerArgs.StateOfCall, callInfo.Id);
                        }
                    }
                    if (e is EventOfCallArgs)
                    {
                        if (portContract.Item2.Subscriber.Account > portContract.Item2.Tariff.PricePerMinute)
                        {
                            var callArgs = (EventOfCallArgs)e;

                            if (callArgs.Id.Equals(Guid.Empty))
                            {
                                callInfo = new CallInfo(
                                    callArgs.Number,
                                    callArgs.TargetNumber,
                                    DateTime.Now);
                                Calls.Add(callInfo);
                            }

                            if (!callArgs.Id.Equals(Guid.Empty) && Calls.Any(x => x.Id.Equals(callArgs.Id)))
                            {
                                callInfo = Calls.First(x => x.Id.Equals(callArgs.Id));
                            }
                            if (callInfo != null)
                            {
                                targetPort.IncomingCall(callArgs.Number, callArgs.TargetNumber, callInfo.Id);
                            }
                            else
                            {
                                targetPort.IncomingCall(callArgs.Number, callArgs.TargetNumber, callInfo.Id);
                            }
                        }
                        else
                        {
                            Console.WriteLine("There is not enough money on the terminal {0}!", e.Number);
                        }
                    }
                    if (e is EventOfEndCallArgs)
                    {
                        var args = (EventOfEndCallArgs)e;
                        callInfo           = Calls.First(x => x.Id.Equals(args.Id));
                        callInfo.EndOfCall = DateTime.Now;
                        var sumOfCall = portContract.Item2.Tariff.PricePerMinute * TimeSpan.FromTicks((callInfo.EndOfCall - callInfo.StartOfCall).Ticks).TotalMinutes;
                        callInfo.CostOfCall = (int)sumOfCall;
                        targetPortContract.Item2.Subscriber.WithdrawMoney(callInfo.CostOfCall);
                        targetPort.AnswerCall(args.Number, args.TargetNumber, StateOfCall.Reject, callInfo.Id);
                    }
                }
            }
            else if (!Subscribers.ContainsKey(e.TargetNumber))
            {
                Console.WriteLine("Trying to call a non-existent number".ToUpper());
            }
            else
            {
                Console.WriteLine("Trying to call your own number".ToUpper());
            }
        }
예제 #7
0
 public bool ContainsCall(Func <ActionCall, bool> filter)
 {
     return(Calls.Any(filter));
 }
예제 #8
0
        public void Login()
        {
            // Change the polling to 10s from 20s in 1.4.3.180
            if (Settings.Get("NewPolling_1.4.3", false) == false)
            {
                Settings.Set("UpdateFreq", 10);
                Settings.Set("NewPolling_1.4.3", true);
            }

            new Thread(() =>
            {
                retry:
                try
                {
                    account.Login();
                    try
                    {
                        account.ContactsManager.OnContactsUpdated += () =>
                        {
                            if (OnContactsUpdated != null)
                            {
                                OnContactsUpdated();
                            }
                        };
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Error in contacts assoc " + ex);
                    }

                    account.Ready += () =>
                    {
                        foreach (var m in account.VoiceMailFeed.Messages.ToArray().Reverse())
                        {
                            if (Voicemails.Any(vm => vm.Message == m))
                            {
                                continue;
                            }
                            Voicemails.Add(
                                new VoiceMessage(account.ContactForNumber(m.Number),
                                                 (GoogleVoice.VoiceMailMessage)m));
                        }
                        foreach (var m in account.PlacedCalls.Messages.ToArray())
                        {
                            if (Calls.Any(cm => cm.Message == m))
                            {
                                continue;
                            }
                            Calls.Add(
                                new CallMessage(account.ContactForNumber(m.Number),
                                                (GoogleVoice.Message)m));
                        }
                        foreach (var m in account.MissedCalls.Messages.ToArray())
                        {
                            if (Calls.Any(cm => cm.Message == m))
                            {
                                continue;
                            }
                            Calls.Add(
                                new CallMessage(account.ContactForNumber(m.Number),
                                                (GoogleVoice.Message)m));
                        }
                        foreach (var m in account.ReceivedCalls.Messages.ToArray())
                        {
                            if (Calls.Any(cm => cm.Message == m))
                            {
                                continue;
                            }
                            Calls.Add(
                                new CallMessage(account.ContactForNumber(m.Number),
                                                (GoogleVoice.Message)m));
                        }
                        Calls.Sort(new MessageComparer <CallMessage>());
                        Voicemails.Sort(new MessageComparer <VoiceMessage>());
                    };

                    account.OnMessage += (m) =>
                    {
                        if (m.Class == Message.MessageType.Voicemail)
                        {
                            Trace.Write("Adding vm: " + m);
                            Voicemails.Insert(0,
                                              new VoiceMessage(account.ContactForNumber(m.Number),
                                                               (GoogleVoice.VoiceMailMessage)m));
                        }
                        if (m.Class == Message.MessageType.Missed ||
                            m.Class == Message.MessageType.Placed ||
                            m.Class == Message.MessageType.Received)
                        {
                            Trace.Write("Adding call: " + m);
                            Calls.Add(
                                new CallMessage(account.ContactForNumber(m.Number),
                                                (GoogleVoice.Message)m));
                            Calls.Sort(new MessageComparer <CallMessage>());
                        }
                    };

                    new Thread(() =>
                    {
                        while (true)
                        {
                            int updateFreq = Settings.Get("UpdateFreq", 10);
                            if (updateFreq == -1)
                            {
                                return;
                            }
                            if (updateFreq < 5)
                            {
                                updateFreq = 5;
                            }
                            Thread.Sleep(1000 * updateFreq);
                            account.UpdateAsync();
                        }
                    }).Start();

                    if (OnLoginSuccess != null)
                    {
                        OnLoginSuccess();
                    }
                }
                catch (GVLoginException ex)
                {
                    Trace.WriteLine("Login Failed: " + ex);
                    // bad password
                    if (OnLoginFailure != null)
                    {
                        OnLoginFailure();
                    }
                }
                catch (Exception ex)
                {
                    Trace.WriteLine("Login Failed: " + ex);
                    if (OnLoginMessage != null)
                    {
                        OnLoginMessage("No Internet Connection, retrying in 10 seconds.");
                    }
                    Thread.Sleep(1000 * 10);
                    goto retry;
                }
            }).Start();
        }