96 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DVBServices;
using skyscraper5.Mpeg2;
namespace skyscraper8.EPGCollectorPort.SkyscraperSide.MediaHighway2
{
internal class Mhw2Parser : IPsiProcessor
{
private Mhw2EventHandler eventHandler;
public Mhw2Parser(Mhw2EventHandler eventHandler)
{
this.eventHandler = eventHandler;
}
public void GatherPsi(PsiSection section, int sourcePid)
{
if (section.TableId == 0xc8)
{
byte[] bytes = section.GetData();
switch (bytes[3])
{
case 0:
try
{
MediaHighway2ChannelSection channelSection = MediaHighway2ChannelSection.ProcessMediaHighwayChannelTable(bytes);
eventHandler.OnMhw2Channels(sourcePid, channelSection);
}
catch (NotImplementedException e)
{
Console.WriteLine(e);
throw;
}
return;
case 1:
try
{
MediaHighway2CategorySection categorySection = MediaHighway2CategorySection.ProcessMediaHighwayCategoryTable(bytes);
eventHandler.OnMhw2Categories(sourcePid, categorySection);
}
catch (NotImplementedException e)
{
Console.WriteLine(e);
throw;
}
return;
case 2:
//Unknown
break;
case 3:
//Unknown
break;
case 4:
//Channel Name String Table, uninteresting.
return;
default:
eventHandler.OnNonMhw2Traffic(sourcePid, section.TableId, bytes[3]);
return;
}
}
else if (section.TableId == 0xe6)
{
byte[] bytes = section.GetData();
try
{
MediaHighway2TitleSection titleSection = MediaHighway2TitleSection.ProcessMediaHighwayTitleTable(bytes);
if (titleSection != null)
{
eventHandler.OnMhw2Titles(sourcePid, titleSection);
}
}
catch (Exception e)
{
}
return;
}
else if (section.TableId == 0x96)
{
byte[] bytes = section.GetData();
MediaHighway2SummarySection summarySection = MediaHighway2SummarySection.ProcessMediaHighwaySummaryTable(bytes);
eventHandler.OnMhw2Summary(sourcePid,summarySection);
}
else
{
eventHandler.OnNonMhw2Traffic(sourcePid, section.TableId, section.GetData()[3]);
}
}
}
}