zoukankan      html  css  js  c++  java
  • 网络电视精灵

     1  //频道基类
     2       public abstract class ChannelBase
     3     {
     4           //频道名称
     5         public string ChannelName { get; set; }
     6        //频道路径
     7           public string  Path { get; set; }
     8           //节目列表,TvProgram节目类频道上的所有节目列表
     9           public List<TvProgram> TvList { get; set; }
    10           //获取频道列表:通过Fetch方法获取该频道拥有的所有节目列表
    11           public abstract void Fetch();
    12 
    13           public ChannelBase() { }
    14           public ChannelBase(string channelName, string path, List<TvProgram> list)
    15           {
    16               this.ChannelName = channelName;
    17               this.Path = path;
    18               this.TvList = list;
    19           }
    20 
    21       }
     1 public  class ChannelFactory
     2     {
     3        public static ChannelBase getInstance(string type)
     4        {
     5            ChannelBase channel = null;
     6            switch (type)
     7            {
     8                case "TypeA":
     9                    //创建北京电视台对象
    10                    channel = new TypeAChannnel();
    11                    break;
    12                case "TypeB":
    13                    //创建凤凰卫视对象
    14                    channel = new TypeBChannel();
    15                    break;
    16                default:
    17                    break;
    18            }
    19            return channel;
    20        }
    21     }
     1  public class ChannelManager
     2     {
     3         //定制一个泛型集合 Dictionary<K,V>
     4         //key:频道的名称    value:频道对象
     5         private Dictionary<string, ChannelBase> allChannels = new Dictionary<string, ChannelBase>();
     6 
     7         public Dictionary<string, ChannelBase> AllChannels
     8         {
     9             get { return allChannels; }
    10             set { allChannels = value; }
    11         }
    12       /// <summary>
    13       /// 解析所有电视台并填充到双列集合中
    14       /// </summary>
    15         public void ResolveAllChannels()
    16         {
    17             XmlDocument doc = new XmlDocument();
    18             doc.Load("files\FullChannels.xml");
    19             XmlNode root = doc.DocumentElement;
    20             foreach (XmlNode item in root.ChildNodes)
    21             {
    22                 string type = item["channelType"].InnerText;
    23                 //一个item就是一个频道
    24                 ChannelBase channel = ChannelFactory.getInstance(type);
    25                 channel.ChannelName = item["tvChannel"].InnerText;
    26                 channel.Path = item["path"].InnerText;
    27                 //解析到双列集合中
    28                 allChannels.Add(channel.ChannelName, channel);
    29             }
    30 
    31         }
    32         
    33     }
     1 //节目类
     2    public  class TvProgram
     3     {
     4        //播出时间
     5         public DateTime PlayTime { get; set; }
     6        //早间档 午间档 晚间档
     7        public string ShiDuan { get; set; }
     8         //节目名称
     9        public string  Name { get; set; }
    10       //视频路径
    11        public string Path { get; set; }
    12    }
     1  //北京电视台
     2     public class TypeAChannnel : ChannelBase
     3     {
     4         public override void Fetch()
     5         {
     6             
     7             //获取频道列表
     8             XmlDocument doc = new XmlDocument();
     9             doc.Load(Path);
    10             XmlNode elem = doc.DocumentElement;
    11             TvList = new List<TvProgram>();
    12 
    13              foreach (XmlNode node in elem.ChildNodes)
    14             {
    15                 if (node.Name == "tvProgramTable")
    16                 {
    17                     foreach (XmlNode child in node.ChildNodes)
    18                     {
    19                         TvProgram program = new TvProgram();
    20                         program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
    21                         program.ShiDuan = child["meridien"].InnerText;
    22                         program.Name = child["programName"].InnerText;
    23                         program.Path = child["path"].InnerText;
    24 
    25                         this.TvList.Add(program);
    26                     }
    27                 }
    28 
    29             }
    30            
    31         }
    32 }
     //凤凰卫视
       public  class TypeBChannel:ChannelBase
        {
           public override void Fetch()
           {
               //获取节目列表  
               XmlDocument xmlDoc = new XmlDocument();
               xmlDoc.Load(Path);
               XmlNode elem = xmlDoc.DocumentElement;
               TvList = new List<TvProgram>();
                foreach (XmlNode node in elem.ChildNodes[0])//[0]第一个节点  
               {
                   TvProgram programe = new TvProgram();
                   programe.PlayTime = DateTime.Parse(node["playTime"].InnerText);
                   programe.ShiDuan = "";
                   programe.Name = node["name"].InnerText;
                   programe.Path = node["path"].InnerText;
    
                   this.TvList.Add(programe);
               }  
           }
    
        }
     

     1  TreeNode node = new TreeNode();
     2         TreeNode allNode = new TreeNode();//另一个根节点
     3         Dictionary<string, List<TvProgram>> dic = new Dictionary<string, List<TvProgram>>();
     4         private void frmMain_Load(object sender, EventArgs e)
     5         {
     6             dgvList.AutoGenerateColumns = false;
     7             //1.在treeview上构建两个根节点
     8             node.Text = "我的电视台";
     9             //2.将node绑定到treeView1上
    10             treeView1.Nodes.Add(node);
    11 
    12             allNode.Text = "所有电视台";
    13             //2.将allNode绑定到treeView1上
    14             treeView1.Nodes.Add(allNode);
    15 
    16             LoadDataFromXml();
    17         }
    18         /// <summary>
    19         /// 动态绑定treeview节点
    20         /// </summary>
    21         private void LoadDataFromXml()
    22         {
    23             //ChannelManager有一个集合 调度 ResolveAllChannels方法 集合就有值了
    24             ChannelManager manager = new ChannelManager();
    25             manager.ResolveAllChannels();//解析所有电视台相当于给集合赋值
    26             foreach (ChannelBase channel in manager.AllChannels.Values)
    27             {
    28                 //一个channel在Tv上就是一个节点
    29                 TreeNode tn = new TreeNode();
    30                 tn.Text = channel.ChannelName;
    31                 tn.Tag = channel;
    32                 allNode.Nodes.Add(tn);
    33             }
    34 
    35         }
    36 
    37         private void treeView1_AfterSelect_1(object sender, TreeViewEventArgs e)
    38         {
    39             TreeNode selectNode = treeView1.SelectedNode;
    40             //获取到选中节点的level值
    41             int level = selectNode.Level;
    42             if (level == 1)
    43             {
    44                 ChannelBase channel = (ChannelBase)selectNode.Tag;
    45                 channel.Fetch();
    46                 //channel.TvList.Clear();
    47                 dgvList.DataSource = channel.TvList;
    48 
    49             }
    50         }
    51 
    52         private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)
    53         {
    54             TreeNode selectedNode = treeView1.SelectedNode;
    55             ChannelBase channel = (ChannelBase)selectedNode.Tag;
    56             channel.Fetch();
    57             foreach (TreeNode item in selectedNode.Nodes)
    58             {
    59                 if (item.Text == channel.ChannelName)
    60                 {
    61                     MessageBox.Show("此电视台已加入,无需重复添加!");
    62                     return;
    63                 }
    64             }
    65             dic.Add(channel.ChannelName, channel.TvList);
    66             TreeNode NewNode = new TreeNode();
    67             NewNode.Text = channel.ChannelName;
    68             NewNode.Tag = channel;
    69             node.Nodes.Add(NewNode);
    70         }
    71 
    72         private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
    73         {
    74             TreeNode selectedNode = treeView1.SelectedNode;
    75             ChannelBase channel = (ChannelBase)selectedNode.Tag;
    76             dic.Remove(channel.ChannelName);
    77             selectedNode.Nodes.Remove(selectedNode);
    78 
    79         }
    80 
    81         private void 播放ToolStripMenuItem_Click(object sender, EventArgs e)
    82         {
    83             string programName = dgvList.SelectedRows[0].Cells[1].Value.ToString();
    84             MessageBox.Show("正在播放:" + programName + "");
    85 
    86         }
    87   
  • 相关阅读:
    CentOS 7 调整home大小
    跨站请求拦截
    SVN操作
    openoffice安装
    MySQL报错ERROR 1436 (HY000): Thread stack overrun:
    jolokia配置Java监控
    elasticksearch分词,导致kibana的url出现问题
    C语言scanf跳出循环的问题
    Jenkins远程代码执行漏洞
    ActiveMQ FileServer漏洞(详细)
  • 原文地址:https://www.cnblogs.com/aaaaliling/p/8903658.html
Copyright © 2011-2022 走看看