private void postDemandInfo(DemandInfo info)
 {
     if (DemandInfoEvent != null && info != null)
     {
         DemandInfoEvent(info);
     }
 }
        private void removeDemandInfo(DemandInfo info)
        {
            if (info == null)
            {
                return;
            }

            //删除点歌信息
            if (DemandInfoEvent != null)
            {
                DemandInfoEvent(info);
            }
            m_demandMusicQue.Remove(info);
        }
        public void OnRcvDamaku(string userName, string keyword)
        {
            //收到弹幕

            //1、判断歌曲数目
            var isFull = m_demandMusicQue.isFull();

            if (isFull)
            {
                Debug.WriteLine("Warning: song reach max num");
                return;
            }


            //2、判断是不是弹幕点歌格式
            keyword = checkDemandMusicName(keyword);

            if (keyword.Length == 0)
            {
                Debug.WriteLine("Warning: no keyword:" + keyword);
                return;
            }

            var isExist = isKeywordExist(keyword);

            if (isExist)
            {
                Debug.WriteLine("Warning: keyword already exist:" + keyword);
                return;
            }

            Debug.WriteLine("On demand music:" + keyword);

            //add queue
            var demandInfo = new DemandInfo();

            demandInfo.Keyword  = keyword;
            demandInfo.QueueId  = genQueueId();
            demandInfo.UserName = userName;
            demandInfo.Status   = DemandSongStatus.Queue;

            m_tmpDemandQue.Add(demandInfo);

            postDemandInfo(demandInfo);

            tryFigureTmpDemandQue();
        }
        public DemandInfo GetInfo(UInt32 queueId, bool isRemove = false)
        {
            DemandInfo info  = null;
            int        index = -1;

            for (int i = 0; i < m_demandMusicQue.Count; i++)
            {
                var tmpInfo = (DemandInfo)m_demandMusicQue[i];
                if (tmpInfo.QueueId == queueId)
                {
                    info  = tmpInfo;
                    index = i;
                    break;
                }
            }

            if (isRemove && index > -1)
            {
                m_demandMusicQue.RemoveAt(index);
            }
            return(info);
        }
        public void tryPlayMusic()
        {
            //尝试播放音乐
            var firstInfo = m_demandMusicQue.First();

            if (firstInfo != null)
            {
                m_curMusicMode = MusicMode.DemandMusic;            //点歌模式
                if (firstInfo.Status == DemandSongStatus.WaitPlay) //队列第一个刚好是等待播放状态
                {
                    m_musicPlayer.Play(firstInfo.QueueId, firstInfo.SongInfo.FileName);
                }
            }
            else //自定义音乐播放模式
            {
                var musicNum = m_localMusicList.Count;

                if (musicNum == 0)
                {
                    m_curMusicMode = MusicMode.Invalid; //无效状态
                    return;
                }

                m_curMusicMode = MusicMode.LocalMusic; //本地音乐

                var musicIdx = -1;

                if (m_localMusicIdx == -1) //初始化
                {
                    musicIdx = 0;
                }
                else
                {
                    musicIdx = m_localMusicIdx + 1; //下一曲
                    if (musicIdx >= musicNum)       //循环
                    {
                        musicIdx = 0;
                    }
                }

                m_localMusicIdx = musicIdx;

                //生成信息
                string fileName   = (string)m_localMusicList[musicIdx];
                string musicName  = Path.GetFileNameWithoutExtension(fileName);
                var    demandInfo = new DemandInfo();
                demandInfo.Keyword      = musicName;
                demandInfo.QueueId      = genQueueId();
                demandInfo.UserName     = "******";
                demandInfo.Status       = DemandSongStatus.WaitPlay;
                demandInfo.IsLocalMusic = true;
                demandInfo.SongInfo     = new Song(null)
                {
                    Id = 0, FileName = fileName, Name = musicName
                };
                //加入队列
                m_demandMusicQue.Add(demandInfo);
                postDemandInfo(demandInfo);
                //播放音乐
                m_musicPlayer.Play(demandInfo.QueueId, fileName);
            }
        }
        private void onDemandInfo(DemandInfo info)
        {
            var queueId = info.QueueId.ToString();
            var status  = info.Status;

            var          items = listViewMusic.Items;
            ListViewItem item  = items[queueId];

            if (item == null)
            {
                if (status == DemandSongStatus.Queue || (info.IsLocalMusic == true && status == DemandSongStatus.WaitPlay))
                {
                    item      = new ListViewItem();
                    item.Name = queueId;
                    item.SubItems.Add(info.Keyword);
                    item.SubItems.Add(info.UserName);

                    listViewMusic.Items.Add(item);
                }
                else //初始化
                {
                    return;
                }
            }


            var isError = info.isError();


            if (isError)
            {
                string tipsStr = null;
                switch (info.Error)
                {
                case DemandSongError.Full:
                    tipsStr = "曲单已满";
                    break;

                case DemandSongError.Search:
                    tipsStr = "找不到歌曲";
                    break;

                case DemandSongError.GetDetail:
                    tipsStr = "获取歌曲信息失败";
                    break;

                case DemandSongError.Download:
                    tipsStr = "下载失败";
                    break;

                case DemandSongError.Cancel:
                    tipsStr = "取消";
                    break;

                case DemandSongError.Repeat:
                    tipsStr = "重复";
                    break;

                default:
                    break;
                }

                if (tipsStr != null)
                {
                    item.Text = tipsStr;
                }
                Debug.WriteLine("SongInfo Error: " + info.Keyword + " status:" + info.Status + " error:" + info.Error);
            }
            else
            {
                var    song    = info.SongInfo;
                string tipsStr = null;
                switch (status)
                {
                case DemandSongStatus.Queue:
                    tipsStr = "等待处理";
                    break;

                case DemandSongStatus.Search:
                    tipsStr = "搜索中";
                    break;

                case DemandSongStatus.GetDetail:
                    tipsStr = "获取信息中";
                    break;

                case DemandSongStatus.Download:
                    tipsStr = "下载中";
                    item.SubItems[1].Text = song.Name;
                    break;

                case DemandSongStatus.WaitPlay:
                    tipsStr = "等待播放";
                    break;

                case DemandSongStatus.Playing:
                    tipsStr = "播放中";
                    break;

                case DemandSongStatus.PlayEnd:
                    tipsStr = "播放完毕";
                    break;

                default:
                    break;
                }
                if (tipsStr != null)
                {
                    item.Text = tipsStr;
                }
                Debug.WriteLine("SongInfo: " + info.Keyword + " status:" + status);
            }
        }
 public void Remove(DemandInfo info)
 {
     m_demandMusicQue.Remove(info);
 }
 public void Add(DemandInfo info)
 {
     Debug.Assert(!isFull(), "should check full first");
     m_demandMusicQue.Add(info);
 }