Exemple #1
0
        /// <summary>
        /// 采用两个实体比较对象按照某种比较逻辑进行处理,构造一个新的实体比较对象
        /// </summary>
        /// <seealso cref="http://www.cnblogs.com/bluedoctor/archive/2010/11/28/1870095.html"/>
        /// <param name="compare1">比较逻辑符号左边的实体比较对象</param>
        /// <param name="logic">比较逻辑</param>
        /// <param name="compare2">比较逻辑符号左边的实体比较对象</param>
        public OQLCompare(OQLCompare compare1, CompareLogic logic, OQLCompare compare2)
        {
            //propertyList.AddRange(compare1.propertyList);
            //compareValueList.AddRange(compare1.compareValueList);
            //compareTypeList.AddRange(compare1.compareTypeList);

            //propertyList.AddRange(compare2.propertyList);
            //compareValueList.AddRange(compare2.compareValueList);
            //compareTypeList.AddRange(compare2.compareTypeList);
            //compareLogicStrList.AddRange(compare1.compareLogicStrList);

            dictionaryAddRange(compareValueList, compare1.compareValueList);
            dictionaryAddRange(compareValueList, compare2.compareValueList);

            switch (logic)
            {
                case CompareLogic.AND:
                    //this.compareLogicStrList.Add(" AND ");
                    this.CompareString = " (" + compare1.CompareString + " AND " + compare2.CompareString + ") ";
                    break;
                case CompareLogic.OR:
                    //this.compareLogicStrList.Add(" OR ");
                    this.CompareString = " (" + compare1.CompareString + " OR " + compare2.CompareString + ") ";
                    break;
                //case CompareLogic.NOT :
                //    this.compareLogicStrList.Add(" NOT ");
                //    this.CompareString = " NOT (" + compare1.CompareString + " AND " + compare2.CompareString + ") "; 
                //    break;

            }
        }
 public void Cleanup()
 {
     _compare = null;
 }
Exemple #3
0
        /// <summary>
        /// 对一组OQLCompare 对象,执行CompareLogic 类型的比较,通常用于构造复杂的带括号的条件查询
        /// </summary>
        /// <seealso cref="http://www.cnblogs.com/bluedoctor/archive/2011/02/24/1963606.html"/>
        /// <param name="compares">OQL比较对象列表</param>
        /// <param name="logic">各组比较条件的组合方式,And,Or,Not</param>
        /// <returns>新的条件比较对象</returns>
        public OQLCompare Comparer(List<OQLCompare> compares, CompareLogic logic)
        {
            if (compares == null || compares.Count == 0)
                throw new Exception("OQL 条件比较对象集合不能为空或者空引用!");
            if (compares.Count == 1)
                return compares[0];
            OQLCompare cmp = new OQLCompare();
            string typeString = logic == CompareLogic.AND ? " And " : logic == CompareLogic.OR ? " Or " : " Not ";
            foreach (OQLCompare item in compares)
            {
                cmp.CompareString += item.CompareString + typeString;
                if (item.ComparedParameters != null)
                    foreach (string key in item.ComparedParameters.Keys)
                    {
                        cmp.ComparedParameters.Add(key, item.ComparedParameters[key]);
                    }

            }
            cmp.CompareString = cmp.CompareString.Substring(0, cmp.CompareString.Length - typeString.Length);
            cmp.CompareString = " ( " + cmp.CompareString + " ) ";
            return cmp;
        }
 public void Initialize()
 {
     _compare = new CompareLogic();
 }
        public async Task CharacterCard_Should_BeProperlyExportedAndImported()
        {
            var investigatorData = new InvestigatorData
            {
                Name       = "Elisabeth Grimaldi",
                Player     = "Lao",
                Occupation = new Occupation
                {
                    Name = "Badacz"
                },
                Age              = 26,
                Gender           = Gender.Female,
                PlaceOfResidence = "Paryż",
                PlaceOfBirth     = "Londyn"
            };
            var characteristics = new Characteristics
            {
                Strength     = 45,
                Constitution = 70,
                Size         = 71,
                Dexterity    = 45,
                Appearance   = 60,
                Intelligence = 55,
                Power        = 55,
                Education    = 65,
                HitPoints    = 14,
                Luck         = 55,
                MagicPoints  = 11
            };
            var weapons = new System.Collections.ObjectModel.ObservableCollection <Weapon>
            {
                new Weapon
                {
                    Name            = "Średni nóż",
                    Damage          = "1D4 + 2 + MO",
                    NumberOfAttacks = "1"
                }
            };
            var history = new InvestigatorHistory
            {
                CharacterDescription = "Śliczna" +
                                       "Nieśmiała" +
                                       "Elegancka",
                IdeologyAndBeliefs = "Polityka - liberalizm",
                ImportantPeople    = "Nauczyciel medycyny - Emmet Harding" +
                                     "ubóstwiam tą osobę za jej niesamowitą inteligencję",
                ImportantPlaces = "Wieża Eiffela",
                PersonalThings  = "Okrągła, walcowata tuba bez otworu znaleziona pod wejściem do windy wieży Eiffela",
                Qualities       = "Lojalność",
                InjuriesScars   = "10cm blizna na prawej łopatce"
            };
            var belongings = new Belongings
            {
                Equipment = new System.Collections.Generic.List <string>
                {
                    "Książki historyczne",
                    "Średni nóż"
                },
                ExpenditureLevel = 10,
                Cash             = 60,
                Possesions       = new System.Collections.Generic.Dictionary <string, int>
                {
                    { "mieszkanie w Paryżu", 1500 }
                }
            };
            var relations = new System.Collections.ObjectModel.ObservableCollection <Relations>
            {
                new Relations
                {
                    Investigator = "Hudson Caffey",
                    Player       = "Jasiu",
                    Relation     = "kolega, poznany przez Howarda Barnhama"
                },
                new Relations
                {
                    Investigator = "Mortimer Caffey",
                    Player       = "Gerard",
                    Relation     = "kolega, poznany przez Howarda Barnhama"
                },
                new Relations
                {
                    Investigator = "Howard Barnham",
                    Player       = "Bartek",
                    Relation     = "Poznany 5 lat temu na bankiecie, dobry przyjaciel"
                }
            };
            var sut = CharacterCard.Create(investigatorData, characteristics, new System.Collections.ObjectModel.ObservableCollection <Skill>(), weapons, history, belongings, relations);
            await sut.InitializeAsync();

            await sut.ExportAsync("CharacterCard.json");

            var newSut = new CharacterCard();
            await newSut.ImportAsync("CharacterCard.json");

            var compareLogic = new CompareLogic();
            var result       = compareLogic.Compare(sut, newSut);

            Assert.IsTrue(result.AreEqual);
        }
Exemple #6
0
        /// <summary>
        /// Create a channel instance
        /// <param name="config">Channel config information</param>
        /// </summary>
        public ChannelInstance(ChannelConfig config, ChannelState state)
        {
            ChannelState = state;
            Config       = config;
            _log         = LogManager.GetLogger(config.Channel);
            Chat         = new ChatController(config.TwitchAuth);
            Dota         = new DotaBot(config.DotaAuth);

            _lobbyManageTimer = new Timer(5000);
            _lobbyManageTimer.Stop();
            _lobbyManageTimer.Elapsed += UpdateLobbyState;

            _state = new StateMachine <State, Trigger>(State.SignedOff);
            _state.OnTransitioned((transition =>
            {
                _log.DebugFormat("{0} => {1}", transition.Source.ToString("G"), transition.Destination.ToString("G"));
            }));

            _state.Configure(State.Conceived)
            .Permit(Trigger.DisconnectRequested, State.SignedOff);

            _state.Configure(State.SignedOff)
            .SubstateOf(State.Conceived)
            .OnEntry(() => Task.Run(() => Dota.Stop()))
            .OnEntry(() => Task.Run(() => Chat.Stop()))
            .Ignore(Trigger.ChatbotsUnready)
            .Permit(Trigger.ConnectRequested, State.Connecting);

            _state.Configure(State.Connecting)
            .SubstateOf(State.Conceived)
            .OnEntry(() => Task.Run(() => Dota.Start()))
            .OnEntry(() => Task.Run(() => Chat.Start()))
            .Ignore(Trigger.ConnectRequested)
            .Ignore(Trigger.ChatbotsUnready)
            .Permit(Trigger.ChatbotsReady, State.Ready);

            _state.Configure(State.Ready)
            .SubstateOf(State.Conceived)
            .Ignore(Trigger.ChatbotsReady)
            .OnEntry(() => _log.Debug("Ready"))
            .PermitDynamic(Trigger.DotaEnteredLobby, () => Dota.IsLobbyHost ? State.ManageLobby : State.AcquireOwnershipLobby)
            .OnEntryFrom(Trigger.LobbyDeleteRequsted, () =>
            {
                Dota.LeaveLobby(true);
            });

            _state.Configure(State.DotaLobby)
            .SubstateOf(State.Ready)
            .Permit(Trigger.DotaLostLobby, State.Ready)
            .Permit(Trigger.LobbyDeleteRequsted, State.Ready);

            _state.Configure(State.AcquireOwnershipLobby)
            .SubstateOf(State.DotaLobby)
            .Permit(Trigger.LobbyBecameOwner, State.ManageLobby)
            .OnEntry(RequestLobbyOwnership);

            _state.Configure(State.ManageLobby)
            .SubstateOf(State.DotaLobby)
            .OnEntry(VerifyLobby)
            .OnEntry(() => SendHelp());

            _state.Configure(State.LobbyPlay)
            .SubstateOf(State.DotaLobby)
            .OnEntry(() => _log.Debug("DOTA started playing."))
            .OnEntry(() => Dota.LeaveLobby());

            Dota.StateTransitioned   += (sender, transition) => CheckBotStates();
            Dota.LobbyInviteReceived += (sender, invite) =>
            {
                if (invite.sender_id == Config.OwnerSteamId)
                {
                    _log.Debug("Received lobby invite from owner, accepting.");
                    Dota.DotaGcHandler.RespondLobbyInvite(invite.group_id);
                    return;
                }
                _log.Warn("Received lobby invite from unknown user, declining.");
                Dota.DotaGcHandler.RespondLobbyInvite(invite.group_id, false);
            };
            Dota.PartyInviteReceived += (sender, invite) =>
            {
                if (invite.sender_id == Config.OwnerSteamId)
                {
                    _log.Debug("Received party invite from owner, accepting.");
                    Dota.DotaGcHandler.RespondPartyInvite(invite.group_id);
                    return;
                }
                _log.Warn("Received party invite from unknown user, declining.");
                Dota.DotaGcHandler.RespondPartyInvite(invite.group_id, false);
            };
            Dota.LobbyUpdate += (sender, lobby) =>
            {
                if (lobby == null)
                {
                    return;
                }
                if (_state.CanFire(Trigger.LobbyBecameOwner) && Dota.IsLobbyHost)
                {
                    _state.Fire(Trigger.LobbyBecameOwner);
                }
                var logic = new CompareLogic(new ComparisonConfig()
                {
                    MaxDifferences = int.MaxValue
                });

                var compare = logic.Compare(lobby, Dota.Lobby);
                _log.Debug(compare.DifferencesString);
                if (State == State.ManageLobby)
                {
                }
            };
            Dota.JoinedLobbyChat += (sender, args) =>
            {
                if (_state.CanFire(Trigger.LobbyBecameOwner))
                {
                    var owner = Dota.DotaGcHandler.Lobby.members.FirstOrDefault(m => m.id == Dota.Lobby.leader_id);
                    if (owner == null)
                    {
                        _log.Error("There is no owner for this lobby?");
                        return;
                    }

                    var msg = "Hey, " + owner.name + ", please set me as Lobby Host so I can invite people.";
                    Dota.SendLobbyMessage(msg);
                    if (Dota.SteamFriends.GetFriendRelationship(new SteamID(owner.id)) == EFriendRelationship.Friend)
                    {
                        Dota.SteamFriends.SendChatMessage(new SteamID(owner.id), EChatEntryType.ChatMsg, msg);
                    }
                }
            };
        }
Exemple #7
0
 /// <summary>
 /// Static contstructor to initialise compareLogic.
 /// </summary>
 static ClientUtils()
 {
     compareLogic = new CompareLogic();
 }
Exemple #8
0
 public MessageEqualityComparer()
 {
     _compareLogic = new CompareLogic {
         Config = { TreatStringEmptyAndNullTheSame = true, MaxDifferences = 50 }
     };
 }