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; }
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); } } }
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; }
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; //} }
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; }
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; }