Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
 /// <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);
 }
Example #4
0
 /// <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);
     }
 }
Example #5
0
        /// <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);
        }
Example #6
0
 /// <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;
     }
 }
Example #8
0
        /// <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));
        }
Example #9
0
 /// <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);
 }
Example #10
0
        /// <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);
        }