Пример #1
0
        public EnvironmentState GetFullCopy()
        {
            var result = new EnvironmentState();
            result.Clock = Clock.GetFullCopy();

            result.Event = Event == null ? null:Event.GetFullCopy();

            ObservableCollection<Agent> ti = new ObservableCollection<Agent>();
            foreach (var agent in Agents)
            {
                ti.Add(agent.GetFullCopy());
            }
            result.Agents = ti;

            ObservableCollection<Item> tii = new ObservableCollection<Item>();

            foreach (var allItem in Auctions)
            {
                tii.Add(allItem.GetFullCopy());
            }
            result.Auctions = tii;

            tii = new ObservableCollection<Item>();
            foreach (var allItem in CommonRights)
            {
                tii.Add(allItem.GetFullCopy());
            }
            result.CommonRights = tii;

            return result;
        }
Пример #2
0
 public void Add(String agentId, EnvironmentState state)
 {
     String timestamp = state.Clock.HappenedAt;
     if (dict.ContainsKey(timestamp) && dict[timestamp].ContainsKey(agentId))
     {
         state.Clock.HappenedAt += '0';
         timestamp = state.Clock.HappenedAt;
         var tDict = new Dictionary<string, EnvironmentState>();
         tDict.Add(agentId, state);
         dict.Add(timestamp,  tDict);
         _stateToTime.Add(stateCounter, timestamp);
         _stateToTimeSecsDictionary.Add(stateCounter, (int)Double.Parse(state.Clock.TimeStampH.Replace(".", ",")));
         stateCounter++;
         OnPropertyChanged();
     }
     else if (dict.ContainsKey(timestamp) && !dict[timestamp].ContainsKey(agentId))
     {
         dict[timestamp].Add(agentId, state);
     }
     else if (!dict.ContainsKey(timestamp))
     {
         timestamp = state.Clock.HappenedAt;
         var tDict = new Dictionary<string, EnvironmentState>();
         tDict.Add(agentId, state);
         dict.Add(timestamp, tDict);
         _stateToTime.Add(stateCounter, timestamp);
         _stateToTimeSecsDictionary.Add(stateCounter, (int)Double.Parse(state.Clock.TimeStampH.Replace(".", ",")));
         stateCounter++;
         OnPropertyChanged();
     }
     foreach (var agent in state.Agents)
     {
         if (!_startSteps.ContainsKey(agent.ID))
         {
             _startSteps.Add(agent.ID, stateCounter-1);
         }
     }
     foreach (var agent in _startSteps.Keys)
     {
         if (!StateObjectMapper.ContainsAgent(state.Agents, agent) && !_endSteps.ContainsKey(agent))
         {
             _endSteps.Add(agent, stateCounter-1);
         }
     }
 }
Пример #3
0
        public static EnvironmentState MapState(KVP root, AgentDataDictionary _agentDataDictionary, Dispatcher uiThread)
        {
            ObservableCollection<Agent> agList = new ObservableCollection <Agent>();
            ObservableCollection<Item> aucList = new ObservableCollection<Item>();
            ObservableCollection<Item> comList = new ObservableCollection<Item>();

            Dictionary<String, List<KVP>> agts = new Dictionary<string, List<KVP>>();

            EnvironmentState state = new EnvironmentState();
            foreach (var kvp in root.ListOfItems)
            {
                if (kvp.Key.Equals("clock"))
                {
                    state.Clock = new Clock(kvp);
                }

                Item tItem = Item.KvpToItem(kvp, _agentDataDictionary, uiThread);
                if (AgentDataDictionary.IsSpecialItem(tItem.InstanceOf))
                {
                    aucList.Add(tItem);
                }

                if (kvp.Key.StartsWith("event"))
                {
                    //VIK - for future use
                    //Vik -- the future has come. 2014-08-25
                    state.Event = new SystemEvent(kvp, _agentDataDictionary);
                }
                else
                {
                    foreach (var elt in kvp.ListOfItems)
                    {
                        if (elt.Key.Equals("held_by"))
                        {
                            if (!agts.ContainsKey(elt.Value))
                            {
                                agts.Add(elt.Value, new List<KVP> {kvp});
                            }
                            else
                            {
                                List<KVP> tl;
                                if (agts.TryGetValue(elt.Value, out tl))
                                {
                                    tl.Add(kvp);
                                }
                            }
                        }
                        if (elt.Key.Equals("owned_by"))
                        {
                            if (!agts.ContainsKey(elt.Value))
                            {
                                agts.Add(elt.Value, new List<KVP> {});
                            }
                        }
                    }
                }

            }
            foreach (var agt in agts)
            {
                if (!agt.Key.StartsWith("_"))
                {
                    Agent malagent = new Agent(agt.Key, agt.Value, _agentDataDictionary, uiThread);
                    agList.Add(new Agent(agt.Key, agt.Value, _agentDataDictionary, uiThread));
                }
                else
                {
                    ObservableCollection<Item> tRights = Item.KvpToItems(agt.Value, _agentDataDictionary, uiThread);
                    foreach (var tRight in tRights)
                    {
                        comList.Add(tRight);
                    }
                    
                }
            }
            if (!agts.ContainsKey("god"))
            {
                agList.Add(new Agent("god", new List<KVP>(), _agentDataDictionary, uiThread));
            }
            state.Agents = agList;

            //foreach (var ag in state.AllAgents)
            //{
            //    if (!StateObjectMapper.ContainsAgent(state.Agents, ag.ID))
            //    {
            //        ag.Status = ElementStatus.Deleted;
            //    }
            //    else
            //    {
            //        ag.Status = ElementStatus.Unchanged;
            //    }
            //}

            state.Auctions = aucList;
            state.CommonRights = comList;
            return state;
        }
Пример #4
0
        public static void UpdateState (EnvironmentState newState, EnvironmentState oldState,AgentDataDictionary _agentDataDictionary, Dispatcher uiThread)
        {
            if (oldState == null)
            {
                oldState = new EnvironmentState();
            }

            if (oldState.Clock == null)
            {
                oldState.Clock = new Clock();
            }
            if (newState.Clock == null)
            {
                newState.Clock = new Clock();
            }

            oldState.Clock.HappenedAt = newState.Clock.HappenedAt;
            oldState.Clock.ExpiredAt = newState.Clock.ExpiredAt;
            oldState.Clock.TimeStampE = newState.Clock.TimeStampE;
            oldState.Clock.TimeStampH = newState.Clock.TimeStampH;
            oldState.Clock.SetTextList();
            
            oldState.Event = newState.Event;
            UpdateAuctions(oldState.Auctions, newState.Auctions, uiThread);
            UpdateCommons(oldState.CommonRights, newState.CommonRights, uiThread);
            UpdateStep(oldState.Agents, newState.Agents, uiThread);
            //oldState.AllAgents = newState.AllAgents;
            //oldState.AllItems = newState.AllItems;
            
            //UpdateCommons(oldState.AllItems, newState.AllItems, uiThread);

            //UpdateStepAddOnly(oldState.AllAgents, newState.AllAgents, uiThread);
           
            //foreach (var ag in oldState.AllAgents)
            //{
             
            //        if (!StateObjectMapper.ContainsAgent(oldState.Agents, ag.ID))
            //        {
            //            ag.Status = ElementStatus.Deleted;
            //        }
            //        else
            //        {
            //            ag.Status = ElementStatus.Unchanged;
            //        }

            //        if (StateObjectMapper.ContainsAgent(oldState.Agents, ag.ID))
            //        {
            //            ag.LastStep = LogProcessor.GetAgentEndStep(ag.ID);
            //        }
                
            //}
            

            //foreach (var itm in oldState.AllItems)
            //{
            //    bool found = false;
            //    foreach (var ag in oldState.Agents)
            //    {
            //        if (StateObjectMapper.ContainsItem(ag.Items, itm.Key))
            //        {
            //            found = true;
            //            break;
            //        }
            //    }
                
            //    itm.Status = found?ElementStatus.Unchanged:ElementStatus.Deleted;

            //}
        }
Пример #5
0
        public bool GetSpecificLine(int number)
        {
            EnvironmentState sTate = new EnvironmentState();
            var sTate1 = states[_currentAgent, number - 1];
            if (sTate1 != null)
            {
                sTate1 = sTate1.GetFullCopy();
                var state2 = states[_currentAgent, number];
                if (state2 != null)
                {
                    state2 = state2.GetFullCopy();
                    StateObjectMapper.UpdateState(sTate, CurrentState, _agentDataDictionary, _dispatcher);
                    StateObjectMapper.UpdateState(sTate1, CurrentState, _agentDataDictionary, _dispatcher);
                    StateObjectMapper.UpdateState(state2, CurrentState, _agentDataDictionary, _dispatcher);
                    Index = number;
                }
            }
            else
            {
                var state2 = states[_currentAgent, number];
                if (state2 != null)
                {
                    state2 = state2.GetFullCopy();
                    StateObjectMapper.UpdateState(sTate, CurrentState, _agentDataDictionary, _dispatcher);
                    StateObjectMapper.UpdateState(state2, CurrentState, _agentDataDictionary, _dispatcher);
                    Index = number;
                }
                else return false;
            }

            return true;

        }
Пример #6
0
 public void InitProcessor(CfgSettings config, Dispatcher dispatcher, RunMode runMode)
 {
     _agentDataDictionary = new AgentDataDictionary(config);
     _dispatcher = dispatcher;
     AllAgents = new ObservableCollection<Agent>();
     AllItems = new ObservableCollection<Item>();
     CurrentState = new EnvironmentState();
     CurrentState.Clock = new Clock();
     states = new StateDictionary();
     states.PropertyChanged += states_PropertyChanged;
     cfgInfo = config;
     CurrentAgent = "god";
     Index = 0;
     _runMode = runMode;
     
 }