private void btnRun_Click(object sender, EventArgs e) { try { Objects.ForEach(o => o.BgColor = Color.Orange); VisitedNodes = new ObservableCollection <object>(); VisitedNodes.CollectionChanged += _visitedNodes_CollectionChanged; BaseNetwork network = rbPredefinedNetwork.Checked ? (BaseNetwork)cbPredefinedNetworks.SelectedItem : _customNetwork; DistributedAlgorithm <int, string> algorithm = rbFromList.Checked ? (DistributedAlgorithm <int, string>)cbAlgorithms.SelectedItem : (DistributedAlgorithm <int, string>)Activator.CreateInstance((Type)((ComboBoxItem)cbClassFromDll.SelectedItem).Value); NodesManager.Instance.Nodes.Clear(); NodesManager.Instance.Nodes.AddRange(network.GetNetwork(algorithm, new NetworkSimulator(), node_OnNodeMessage)); NodesManager.Instance.Nodes.ForEach(n => ((NetworkSimulator)n.GetNetworkComponent()).CurrentNodeId = n.GetId()); var messages = txtMessage.Text.Split(';'); RedrawPanel(Objects, Connections); for (int i = 0; i < chlInitNodes.CheckedItems.Count; i++) { Objects.First(p => p.Id == ((Node <int, string>)chlInitNodes.CheckedItems[i]).GetId().Id).BgColor = Colors[i % 8]; var thread = new Thread(ExecuteInit); var message = i < messages.Length ? messages[i] : messages[messages.Length - 1]; thread.Start(new List <object> { i, message, Colors[i % 8] }); } } catch (Exception ex) { MessageBox.Show("Error has occured. More information: " + ex); } }
/// <summary> /// Only to get structure, not intended for real use /// </summary> /// <param name="network"></param> /// <returns></returns> private List <Node <int, string> > ListOfNodesFromNetwork(BaseNetwork network) { return(network.GetNetwork(new Broadcast(), new NetworkSimulator(), node_OnNodeMessage)); }