public PackageDatagram(PackageDatagram p) { ID_start = p.ID_start; ID_finish = p.ID_finish; Size = p.Size; Way = new List<int>(p.Way); Request = p.Request; Start_time = p.Start_time; Finish_time = p.Finish_time; Ending = p.Ending; }
public void executePackage() { if (BufLogicalConnection.Count > 0) { if (!BufLogicalConnection[0].Permission) return; if (TactsCurrent < TactsNeeded * BufLogicalConnection[0].Size / PackageLogicalConnection.MAX_SIZE_SERVICE) { TactsCurrent++; return; } TactsCurrent = 0; if (BufLogicalConnection[0].Service) MainForm.CountServiceAccepted++; else MainForm.CountInfoAccepted++; BufLogicalConnection[0].Way.RemoveAt(0); if (BufLogicalConnection[0].Request) { if (BufLogicalConnection[0].Way.Count == 0) { MainForm.Count_service_sent++; Node node_start = MainForm.findNodeInListById(BufLogicalConnection[0].ID_start, MainForm.Nodes); Node node_finish = MainForm.findNodeInListById(BufLogicalConnection[0].ID_finish, MainForm.Nodes); List<int> way_to_home = new List<int>(Ways.findWayNodeToNode(node_start, node_finish)); way_to_home.Reverse(); BufLogicalConnection[0] = new PackageLogicalConnection(BufLogicalConnection[0].ID_start, BufLogicalConnection[0].ID_finish, PackageLogicalConnection.MAX_SIZE_SERVICE, way_to_home, true, false, true, BufLogicalConnection[0].Start_time); return; } foreach (Channel channel in MainForm.findNodeInListById(this.ID_end, MainForm.Nodes).directConnections) if (channel.ID_end == BufLogicalConnection[0].Way[0]) { if (BufLogicalConnection[0].Service) MainForm.Count_service_sent++; else MainForm.CountInfoSent++; channel.BufLogicalConnection.Add(new PackageLogicalConnection(BufLogicalConnection[0])); BufLogicalConnection.RemoveAt(0); return; } } if (BufLogicalConnection[0].Way.Count == 0) { if (BufLogicalConnection.Count > 1) { if (BufLogicalConnection[1].Service) MainForm.Count_service_sent++; else MainForm.CountInfoSent++; BufLogicalConnection[1].getPermission(); } if (BufLogicalConnection.Count == 1) { BufLogicalConnection[0].Finish_time = MainForm.tacts_counter; MainForm.accepted_logical_connection.Add(new PackageLogicalConnection(BufLogicalConnection[0])); } if (BufLogicalConnection.Count > 2 && BufLogicalConnection[1].Service && !BufLogicalConnection[2].Service) { BufLogicalConnection[0].Finish_time = MainForm.tacts_counter; MainForm.accepted_logical_connection.Add(new PackageLogicalConnection(BufLogicalConnection[0])); } BufLogicalConnection.RemoveAt(0); return; } //MainForm.Count_service_sent++; if (BufLogicalConnection.Count > 1) BufLogicalConnection[1].getPermission(); foreach (Channel channel in MainForm.findNodeInListById(BufLogicalConnection[0].Way[0], MainForm.Nodes).directConnections) if (channel.ID_end == this.ID_start) { if (BufLogicalConnection[0].ID_start == channel.ID_start) { MainForm.Count_service_sent++; channel.BufLogicalConnection.Insert(0, new PackageLogicalConnection(BufLogicalConnection[0])); BufLogicalConnection.RemoveAt(0); return; } else { if (channel.BufLogicalConnection.Count > 0) channel.BufLogicalConnection[0].getPermission(); channel.BufLogicalConnection.Add(new PackageLogicalConnection(BufLogicalConnection[0])); BufLogicalConnection.RemoveAt(0); return; } } } else if (BufDatagram.Count > 0) { if (!MainForm.findNodeInListById(ID_start, MainForm.Nodes).State || !MainForm.findNodeInListById(ID_end, MainForm.Nodes).State) { BufDatagram.RemoveAt(0); TactsCurrent = 0; return; } if (TactsCurrent < TactsNeeded * BufDatagram[0].Size / PackageDatagram.SizeServicePackage) { TactsCurrent++; return; } TactsCurrent = 0; if (BufDatagram[0].Request) MainForm.CountInfoAccepted++; else MainForm.CountServiceAccepted++; BufDatagram[0].Way.RemoveAt(0); if (BufDatagram[0].Request) { if (BufDatagram[0].Way.Count == 0) { MainForm.Count_service_sent++; Node node_start = MainForm.findNodeInListById(BufDatagram[0].ID_start, MainForm.Nodes); Node node_finish = MainForm.findNodeInListById(BufDatagram[0].ID_finish, MainForm.Nodes); List<int> way_to_home = new List<int>(Ways.findWayNodeToNode(node_start, node_finish)); way_to_home.Reverse(); way_to_home.RemoveAt(0); BufDatagram[0] = new PackageDatagram(BufDatagram[0].ID_start, BufDatagram[0].ID_finish, PackageDatagram.SizeServicePackage, way_to_home, false, BufDatagram[0].Start_time, BufDatagram[0].Ending); return; } foreach (Channel channel in MainForm.findNodeInListById(this.ID_end, MainForm.Nodes).directConnections) if (channel.ID_end == BufDatagram[0].Way[0]) { MainForm.CountInfoSent++; channel.BufDatagram.Add(new PackageDatagram(BufDatagram[0])); BufDatagram.RemoveAt(0); return; } } if (BufDatagram[0].Way.Count == 0) { if (BufDatagram[0].Ending) { BufDatagram[0].Finish_time = MainForm.tacts_counter; MainForm.accepted_datagram.Add(new PackageDatagram(BufDatagram[0])); } BufDatagram.RemoveAt(0); return; } MainForm.Count_service_sent++; foreach (Channel channel in MainForm.findNodeInListById(BufDatagram[0].Way[0], MainForm.Nodes).directConnections) if (channel.ID_end == this.ID_start) { channel.BufDatagram.Add(new PackageDatagram(BufDatagram[0])); BufDatagram.RemoveAt(0); return; } } }