/// <summary> /// Gets the virtual container. /// </summary> /// <param name="level">The level.</param> /// <param name="hiIndex">Index of the hi.</param> /// <param name="lowIndex">Index of the low.</param> /// <returns></returns> public IContent GetVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex) { IContent returnContent = null; if (level == VirtualContainerLevel.VC4) { if (this.Content.Count >= hiIndex + 1) { returnContent = this.Content[hiIndex]; } } else { if (this.Content.Count >= hiIndex + 1 && lowIndex != null) { int lowerIndex = (int)lowIndex; returnContent = this.Content[hiIndex]; if (VirtualContainer.isVirtualContainer(returnContent)) { returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, lowerIndex); //Get specific virtual container lower level } } } return(returnContent); }
/// <summary> /// Gets the virtual container. /// </summary> /// <param name="level">The level of Virtual Container</param> /// <param name="index">The index.</param> /// <returns></returns> public IContent GetVirtualContainer(VirtualContainerLevel level, int index) { IContent returnContent = null; if (level == VirtualContainerLevel.VC4) { if (this.Content.Count >= index + 1) { returnContent = this.Content[index]; } } else { int higherIndex = GetHigherContainerIndex(level, index); if (this.Content.Count >= higherIndex + 1) { returnContent = this.Content[higherIndex]; if (VirtualContainer.isVirtualContainer(returnContent)) { returnContent = ((VirtualContainer)returnContent).GetVirtualContainerAtIndex(level, index); //Get specific virtual container lower level } } } return(returnContent); }
/// <summary> /// Sets the virtual container. This overwrite the <see cref="Content" /> list member. /// Content must by VirtualContainer! /// </summary> /// <param name="level">The level.</param> /// <param name="hiIndex">Index of the higher level virtual container (VC-4).</param> /// <param name="lowIndex">Index of the lower level virtual container.</param> /// <param name="content">The content. Virtual Container</param> /// <returns> /// True - success, False - fail /// </returns> public bool SetVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex, IContent content) { if (VirtualContainer.isVirtualContainer(content)) { VirtualContainer contentVC = (VirtualContainer)content; if (level == contentVC.Level && this.CalculateFreeSpace() >= Frame.ContainerSpaceConverter(level)) { if (level == VirtualContainerLevel.VC4) { if (this.Content.Count >= hiIndex + 1) { this.Content[hiIndex] = content; return(true); } else { return(false); } } else { //int higherIndex = GetHigherContainerIndex(level, index); if (this.Content.Count >= hiIndex + 1 && lowIndex != null) { int lowerIndex = (int)lowIndex; IContent tempVirtualContainer = this.Content[hiIndex]; if (VirtualContainer.isVirtualContainer(tempVirtualContainer) && ((VirtualContainer)tempVirtualContainer).TryAddContainer(level, lowerIndex)) { ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content); } else if (tempVirtualContainer == null) //Frame does not have VC4 to keep lower virtual container levels { this.Content[hiIndex] = new VirtualContainer(VirtualContainerLevel.VC4); tempVirtualContainer = this.Content[hiIndex]; ((VirtualContainer)tempVirtualContainer).SetVirtualContainerAtIndex(level, lowerIndex, content); } return(true); } else { return(false); } } } else { return(false); } } return(false); }
/// <summary> /// Evaluates the content. Read JSON object create IContent /// </summary> /// <param name="content">The content.</param> /// <returns></returns> private static IContent EvaluateContent(JObject content) { try { if (FrameBuilder.isVirtualContainer(content["Type"])) //VirtualContainer { //Create new VC with level from JSON file VirtualContainer newVC = new VirtualContainer(FrameBuilder.getVCLevel(content["Level"])); newVC.Pointer = content["Pointer"].ToString(); newVC.POH = (POH)FrameBuilder.EvaluateContent((JObject)content["POH"]); if (FrameBuilder.isJArray(content["Content"])) { newVC.Content = FrameBuilder.evaluateContents((JArray)content["Content"]); } else //There is no value Content of VC is null { newVC.Content = null; } return(newVC); } else if (FrameBuilder.isContainer(content["Type"])) { Container newContainer = new Container(content["Content"].ToString()); return(newContainer); } else if (FrameBuilder.isHeader(content["Type"])) { string checksum = content["Checksum"].ToString(); string eow = content["EOW"].ToString(); string dcc = content["DCC"].ToString(); Header newHeader = new Header(checksum, eow, dcc); return(newHeader); } else if (FrameBuilder.isPOH(content["Type"])) { SignalLabelType signalType = FrameBuilder.getSignalType(content["SignalLabel"]); POH poh = new POH(signalType); return(poh); } else { return(null); } } catch (Exception e) { Console.WriteLine(e.Message); return(null); } }
/// <summary> /// Calculates the free space in <see cref="Frame"/> /// </summary> /// <returns></returns> private int CalculateFreeSpace() { int freeSpace = 63 * this.ConvertSTMLevel(this.Level); for (int i = 0; i < Content.Count; i++) { if (VirtualContainer.isVirtualContainer(Content[i])) { VirtualContainer VC = (VirtualContainer)Content[i]; freeSpace -= VC.CalculateSpace(); } } return(freeSpace); }
/// <summary> /// Clears the virtual container. /// </summary> /// <param name="level">The level.</param> /// <param name="index">The number.</param> /// <returns></returns> public bool ClearVirtualContainer(VirtualContainerLevel level, int index) { if (level == VirtualContainerLevel.VC4) { this.Content[index] = null; } else { IContent tempContainer = this.Content[GetHigherContainerIndex(level, index)]; if (VirtualContainer.isVirtualContainer(tempContainer)) { ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, index, null); //Get specific virtual container lower level } } return(true); }
/// <summary> /// Evaluates the content. Read JSON object create IContent /// </summary> /// <param name="content">The content.</param> /// <returns></returns> private static IContent EvaluateContent(JObject content) { try { if (FrameBuilder.isVirtualContainer(content["Type"])) //VirtualContainer { //Create new VC with level from JSON file VirtualContainer newVC = new VirtualContainer(FrameBuilder.getVCLevel(content["Level"])); newVC.Pointer = content["Pointer"].ToString(); newVC.POH = (POH)FrameBuilder.EvaluateContent((JObject)content["POH"]); if (FrameBuilder.isJArray(content["Content"])) { newVC.Content = FrameBuilder.evaluateContents((JArray)content["Content"]); } else //There is no value Content of VC is null { newVC.Content = null; } return newVC; } else if (FrameBuilder.isContainer(content["Type"])) { Container newContainer = new Container(content["Content"].ToString()); return newContainer; } else if (FrameBuilder.isHeader(content["Type"])) { string checksum = content["Checksum"].ToString(); string eow = content["EOW"].ToString(); string dcc = content["DCC"].ToString(); Header newHeader = new Header(checksum, eow, dcc); return newHeader; } else if (FrameBuilder.isPOH(content["Type"])) { SignalLabelType signalType = FrameBuilder.getSignalType(content["SignalLabel"]); POH poh = new POH(signalType); return poh; } else return null; } catch (Exception e) { Console.WriteLine(e.Message); return null; } }
/// <summary> /// Returns a <see cref="System.String" /> that represents this instance. /// </summary> /// <returns> /// A <see cref="System.String" /> that represents this instance. /// </returns> public override string ToString() { string returnString = string.Empty; returnString += this.Level.ToString() + "|"; if (this.Msoh != null) { returnString += "MSOH|"; } else { returnString += "null|"; } if (this.Rsoh != null) { returnString += "RSOH"; } else { returnString += "null"; } foreach (IContent item in this.Content) { if (item != null && VirtualContainer.isVirtualContainer(item)) { returnString += "|" + ((VirtualContainer)item).Level.ToString(); returnString += "+POH"; string VCcontent = string.Empty; foreach (var innerItem in ((VirtualContainer)item).Content) { if (innerItem != null && VirtualContainer.isVirtualContainer(innerItem)) { VCcontent += ((VirtualContainer)innerItem).ToString(); } } if (VCcontent != string.Empty) { returnString += "[" + VCcontent + "]"; } } } return(returnString.Remove(returnString.LastIndexOf('|'), 1)); }
/// <summary> /// Clears the virtual container. /// </summary> /// <param name="level">The level.</param> /// <param name="hiIndex">The number.</param> /// <param name="lowIndex">The number.</param> /// <returns></returns> public bool ClearVirtualContainer(VirtualContainerLevel level, int hiIndex, int?lowIndex) { if (level == VirtualContainerLevel.VC4) { this.Content[hiIndex] = null; } else { if (this.Content.Count >= hiIndex + 1 && lowIndex != null) { int lowerIndex = (int)lowIndex; IContent tempContainer = this.Content[hiIndex]; if (VirtualContainer.isVirtualContainer(tempContainer)) { ((VirtualContainer)tempContainer).SetVirtualContainerAtIndex(level, lowerIndex, null); //Get specific virtual container lower level } } } return(true); }
/// <summary> /// Calculates the space used in the container. /// If VC have only content it takes all free space /// </summary> /// <returns></returns> public int CalculateSpace() { int usedSpace = 0; switch (this.Level) { case VirtualContainerLevel.VC12: usedSpace = 1; break; case VirtualContainerLevel.VC21: usedSpace = 3; break; case VirtualContainerLevel.VC32: usedSpace = 21; break; case VirtualContainerLevel.VC4: foreach (var item in this.Content) { if (VirtualContainer.isVirtualContainer(item)) //VC4 have other VC { usedSpace += ((VirtualContainer)item).CalculateSpace(); } else if (Container.isContainer(item)) //VC4 is full of data { usedSpace = 63; break; } } break; case VirtualContainerLevel.UNDEF: break; default: break; } return(usedSpace); }
private bool CheckForwardingRecord(ForwardingRecord record) { VirtualContainer vc = new VirtualContainer(record.ContainerLevel); if (InputCredentials[record.InputPort].SetVirtualContainer(record.ContainerLevel, record.HigherPathIn, record.VcNumberIn == -1 ? null : (int?)record.VcNumberIn, vc)) { if (OutputCredentials[record.OutputPort].SetVirtualContainer(record.ContainerLevel, record.HigherPathOut, record.VcNumberOut == -1 ? null : (int?)record.VcNumberOut, vc)) { return true; } ((Frame)InputCredentials[record.InputPort]).ClearVirtualContainer(record.ContainerLevel, record.HigherPathIn, record.VcNumberIn == -1 ? null : (int?)record.VcNumberIn); } return false; }
private bool CheckStreamData(StreamData record) { VirtualContainer vc = new VirtualContainer(record.VcLevel); return OutputCredentials[record.Port].SetVirtualContainer(record.VcLevel, record.HigherPath, record.LowerPath, vc); }
public void SentData(Dictionary<StreamData,string> dataToSent) { Dictionary<int, IFrame> outputData = new Dictionary<int, IFrame>(); foreach (StreamData stream in dataToSent.Keys) { if (!Streams.Contains(stream)) { //TODO można rzucać wyjątek continue; } if (!outputData.ContainsKey(stream.Port)) { outputData.Add(stream.Port, new Frame(stream.Stm)); } //TODO ewentualne dzielenie danych Container content = new Container(dataToSent[stream]); VirtualContainer vc = new VirtualContainer(stream.VcLevel, content); outputData[stream.Port].SetVirtualContainer(stream.VcLevel, stream.HigherPath, stream.LowerPath, vc); } Ttf.PassDataToInterfaces(outputData); }