Пример #1
0
        private Grid CreateControlNoBorder(DanMuModel model)
        {
            //创建基础控件
            TextBlock tx = new TextBlock();

            Grid grid = new Grid();

            //设置控件相关信息
            grid.Margin              = new Thickness(0, 0, 20, 0);
            grid.VerticalAlignment   = VerticalAlignment.Center;
            grid.HorizontalAlignment = HorizontalAlignment.Left;
            if (fontFamily != "默认")
            {
                tx.FontFamily = new FontFamily(fontFamily);
            }

            tx.Text       = model.DanText;
            tx.FontWeight = FontWeights.Bold;

            tx.Foreground = model.DanColor;
            //弹幕大小
            double size = double.Parse(model.DanSize);

            if (size == 25)
            {
                tx.FontSize = fontSize;
            }
            else
            {
                tx.FontSize = fontSize - 2;
            }
            grid.Children.Add(tx);
            return(grid);
        }
Пример #2
0
 private void TirggerReceiveDanMu(DanMuModel danMuModel)
 {
     if (ReceiveDanMu != null)
     {
         ReceiveDanMu(danMuModel);
     }
 }
Пример #3
0
 static void ShowDanMu(DanMuModel danMuModel)
 {
     Console.Write(danMuModel.Time.ToString("HH:mm:ss"));
     Console.ForegroundColor = ConsoleColor.Red;
     Console.Write(danMuModel.UserName + ":");
     Console.ForegroundColor = ConsoleColor.Green;
     Console.WriteLine(danMuModel.Content);
     Console.ForegroundColor = ConsoleColor.Gray;
 }
Пример #4
0
        private bool ListenLoop()
        {
            Client = new TcpClient();
            Client.Connect(ChatServe, Port);
            NetStream = Client.GetStream();
            if (SendJoinChannel(RoomId))
            {
                Coonetced = true;
                TirggerCoonected();
                try {
                    byte[] array = new byte[Client.ReceiveBufferSize];
                    while (Coonetced)
                    {
                        NetStream.Read(array, 0, 2);
                        var num = BitConverter.ToInt16(array, 0);
                        num = IPAddress.NetworkToHostOrder(num);
                        switch (num)
                        {
                        case 1: {
                            NetStream.Read(array, 0, 4);
                            var onlineNum = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(array, 0));
                            TirggerOnLineNum(onlineNum);
                            break;
                        }

                        case 2:
                        case 4: {
                            NetStream.Read(array, 0, 2);
                            var size   = (short)(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(array, 0)) - 4);
                            var array2 = new byte[size];
                            NetStream.Read(array2, 0, size);
                            var danMuMsg = Encoding.UTF8.GetString(array2, 0, size);
                            TirggerReceiveDanMu(DanMuModel.CreateModel(danMuMsg));
                            break;
                        }

                        case 8:
                            NetStream.Read(array, 0, 2);
                            break;

                        default:
                            return(true);
                        }
                    }
                }
                catch (Exception) {
                    return(true);
                }
                finally {
                    Disconnect();
                }
            }
            return(true);
        }
Пример #5
0
        private Grid CreateControlShadow(DanMuModel model)
        {
            //创建基础控件
            TextBlock       tx = new TextBlock();
            DropShadowPanel dropShadowPanel = new DropShadowPanel()
            {
                BlurRadius    = 6,
                ShadowOpacity = 1,
                OffsetX       = 0,
                OffsetY       = 0,
                Color         = SetBorder(model.DanColor.Color)
            };


            Grid grid = new Grid();

            //设置控件相关信息
            grid.Margin              = new Thickness(0, 0, 20, 0);
            grid.VerticalAlignment   = VerticalAlignment.Center;
            grid.HorizontalAlignment = HorizontalAlignment.Left;

            if (fontFamily != "默认")
            {
                tx.FontFamily = new FontFamily(fontFamily);
            }

            tx.Text = model.DanText;

            tx.FontWeight = FontWeights.Bold;
            tx.Foreground = model.DanColor;
            //弹幕大小
            double size = double.Parse(model.DanSize);

            if (size == 25)
            {
                tx.FontSize = fontSize;
            }
            else
            {
                tx.FontSize = fontSize - 2;
            }
            dropShadowPanel.Content = tx;

            grid.Children.Add(dropShadowPanel);

            return(grid);
        }
Пример #6
0
 /// <summary>
 /// 移除当前屏幕中的弹幕
 /// </summary>
 public void RemoveDanmu(DanMuModel model)
 {
     foreach (Grid item in grid_Danmu.Children)
     {
         if (item.DataContext == model)
         {
             grid_Danmu.Children.Remove(item);
         }
     }
     foreach (Grid item in D_Bottom.Children)
     {
         if (item.DataContext == model)
         {
             D_Bottom.Children.Remove(item);
         }
     }
     foreach (Grid item in D_Top.Children)
     {
         if (item.DataContext == model)
         {
             D_Top.Children.Remove(item);
         }
     }
 }
Пример #7
0
        /// <summary>
        /// 添加滚动弹幕
        /// </summary>
        /// <param name="model">弹幕参数</param>
        /// <param name="Myself">是否自己发送的</param>
        public async void AddGunDanmu(DanMuModel model, bool Myself)
        {
            try
            {
                //创建基础控件
                TextBlock tx   = new TextBlock();
                TextBlock tx2  = new TextBlock();
                Grid      grid = new Grid();
                //设置控件相关信息
                grid.Margin              = new Thickness(0, 0, 20, 0);
                grid.VerticalAlignment   = VerticalAlignment.Center;
                grid.HorizontalAlignment = HorizontalAlignment.Left;
                if (fontFamily != "默认")
                {
                    tx.FontFamily  = new FontFamily(fontFamily);
                    tx2.FontFamily = new FontFamily(fontFamily);
                }
                tx2.Text       = model.DanText;
                tx.Text        = model.DanText;
                tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
                tx.Foreground  = model.DanColor;
                //弹幕大小
                double size = double.Parse(model.DanSize);
                if (size == 25)
                {
                    tx2.FontSize = fontSize;
                    tx.FontSize  = fontSize;
                }
                else
                {
                    tx2.FontSize = fontSize - 2;
                    tx.FontSize  = fontSize - 2;
                }

                //grid包含弹幕文本信息

                if (D_Border)
                {
                    grid.Children.Add(tx2);
                }
                grid.Children.Add(tx);
                grid.VerticalAlignment   = VerticalAlignment.Top;
                grid.HorizontalAlignment = HorizontalAlignment.Left;

                TranslateTransform moveTransform = new TranslateTransform();
                moveTransform.X      = grid_Danmu.ActualWidth;
                grid.RenderTransform = moveTransform;
                //将弹幕加载入控件中,并且设置位置
                grid_Danmu.Children.Add(grid);

                Grid.SetRow(grid, row);
                row++;
                if (row == maxRow)
                {
                    row = 0;
                }
                tx2.Margin = new Thickness(1);
                if (Myself)
                {
                    grid.BorderThickness = new Thickness(2);
                    grid.BorderBrush     = new SolidColorBrush(Colors.Gray);
                }
                grid.Opacity     = Tran;
                grid.DataContext = model;
                //更新弹幕UI,不更新无法获得弹幕的ActualWidth
                grid.UpdateLayout();
                D_height = grid.ActualHeight;
                if (!wCnMdBUG)
                {
                    SetJJ();
                }

                //SetJJ();
                //创建动画
                Duration        duration           = new Duration(TimeSpan.FromSeconds(Speed));
                DoubleAnimation myDoubleAnimationX = new DoubleAnimation();
                myDoubleAnimationX.Duration = duration;
                //创建故事版
                Storyboard justintimeStoryboard = new Storyboard();
                justintimeStoryboard.Duration = duration;
                myDoubleAnimationX.To         = -(grid.ActualWidth);//到达
                justintimeStoryboard.Children.Add(myDoubleAnimationX);
                Storyboard.SetTarget(myDoubleAnimationX, moveTransform);
                //故事版加入动画
                Storyboard.SetTargetProperty(myDoubleAnimationX, "X");
                grid_Danmu.Resources.Remove("justintimeStoryboard");
                grid_Danmu.Resources.Add("justintimeStoryboard", justintimeStoryboard);
                justintimeStoryboard.Begin();
                //等待,暂停则暂停
                await Task.Run(async() =>
                {
                    int i = 0;
                    while (true)
                    {
                        if (!IsPlaying)
                        {
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                                justintimeStoryboard.Pause();
                            });
                            //break;
                        }
                        else
                        {
                            if (i == Speed * 2)
                            {
                                break;
                            }
                            i++;
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                                justintimeStoryboard.Resume();
                            });
                        }
                        await Task.Delay(500);
                    }
                });

                grid_Danmu.Children.Remove(grid);
            }
            catch (Exception)
            {
            }
        }
Пример #8
0
        /// <summary>
        /// 添加顶部及底部弹幕
        /// </summary>
        /// <param name="model">弹幕参数</param>
        /// <param name="istop">是否顶部</param>
        /// <param name="Myself">是否自己发送的</param>
        public async void AddTopButtomDanmu(DanMuModel model, bool istop, bool Myself)
        {
            TextBlock tx   = new TextBlock();
            TextBlock tx2  = new TextBlock();
            Grid      grid = new Grid();

            if (fontFamily != "默认")
            {
                tx.FontFamily  = new FontFamily(fontFamily);
                tx2.FontFamily = new FontFamily(fontFamily);
            }

            tx2.Text       = model.DanText;
            tx.Text        = model.DanText;
            tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            tx.Foreground  = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]);
            double size = double.Parse(model.DanSize);

            if (size == 25)
            {
                tx2.FontSize = fontSize;
                tx.FontSize  = fontSize;
            }
            else
            {
                tx2.FontSize = fontSize - 2;
                tx.FontSize  = fontSize - 2;
            }
            //grid包含弹幕文本信息
            if (D_Border)
            {
                grid.Children.Add(tx2);
            }
            grid.Children.Add(tx);

            // tx.FontSize = Double.Parse(model.DanSize) - fontSize;
            grid.HorizontalAlignment = HorizontalAlignment.Center;
            grid.VerticalAlignment   = VerticalAlignment.Top;
            tx2.Margin = new Thickness(1);
            if (Myself)
            {
                grid.BorderThickness = new Thickness(2);
                grid.BorderBrush     = new SolidColorBrush(Colors.Gray);
            }
            grid.Opacity     = Tran;
            grid.DataContext = model;
            grid.UpdateLayout();
            D_height = grid.ActualHeight;
            if (istop)
            {
                D_Top.Children.Add(grid);
                await Task.Delay(5000);

                if (state == MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Top.Children.Remove(grid);
                }
            }
            else
            {
                D_Bottom.Children.Add(grid);
                await Task.Delay(5000);

                if (state == MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Bottom.Children.Remove(grid);
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 添加顶部及底部弹幕
        /// </summary>
        /// <param name="model">弹幕参数</param>
        /// <param name="istop">是否顶部</param>
        /// <param name="Myself">是否自己发送的</param>
        public async void AddTopButtomDanmu(DanMuModel model, bool istop, bool Myself)
        {
            //TextBlock tx = new TextBlock();
            //TextBlock tx2 = new TextBlock();
            //Grid grid = new Grid();
            //if (fontFamily != "默认")
            //{
            //    tx.FontFamily = new FontFamily(fontFamily);
            //    tx2.FontFamily = new FontFamily(fontFamily);
            //}

            //tx2.Text = model.DanText;
            //tx.Text = model.DanText;
            //tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            //tx.Foreground = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]);
            //double size = double.Parse(model.DanSize);
            //if (size == 25)
            //{
            //    tx2.FontSize = fontSize;
            //    tx.FontSize = fontSize;
            //}
            //else
            //{
            //    tx2.FontSize = fontSize - 2;
            //    tx.FontSize = fontSize - 2;
            //}
            ////grid包含弹幕文本信息
            //if (D_Border)
            //{
            //    grid.Children.Add(tx2);
            //}
            //grid.Children.Add(tx);

            //// tx.FontSize = Double.Parse(model.DanSize) - fontSize;
            //grid.HorizontalAlignment = HorizontalAlignment.Center;
            //grid.VerticalAlignment = VerticalAlignment.Top;
            //tx2.Margin = new Thickness(1);
            //Grid grid = CreateControlV1(model);
            Grid grid = null;

            switch (danmuStyle)
            {
            case DanmuStyle.Boder:
                grid = CreateControlBorder(model);
                break;

            case DanmuStyle.NoBorder:
                grid = CreateControlNoBorder(model);
                break;

            case DanmuStyle.Shadow:
                grid = CreateControlShadow(model);
                break;

            default:
                grid = CreateControlBorder(model);
                break;
            }

            grid.VerticalAlignment   = VerticalAlignment.Top;
            grid.HorizontalAlignment = HorizontalAlignment.Center;

            if (Myself)
            {
                grid.BorderThickness = new Thickness(2);
                grid.BorderBrush     = new SolidColorBrush(Colors.Gray);
            }
            grid.Opacity     = Tran;
            grid.DataContext = model;
            grid.UpdateLayout();
            //D_height = grid.ActualHeight;
            if (istop)
            {
                D_Top.Children.Add(grid);
                await Task.Delay(5000);

                if (state == MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Top.Children.Remove(grid);
                }
            }
            else
            {
                D_Bottom.Children.Add(grid);
                await Task.Delay(5000);

                if (state == MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Bottom.Children.Remove(grid);
                }
            }
        }
Пример #10
0
        /// <summary>
        /// 添加滚动弹幕
        /// </summary>
        /// <param name="model">弹幕参数</param>
        /// <param name="Myself">是否自己发送的</param>
        public async void AddGunDanmu(DanMuModel model,bool Myself)
        {
            try
            {
                
                //创建基础控件
                TextBlock tx = new TextBlock();
                TextBlock tx2 = new TextBlock();
                Grid grid = new Grid();
                //设置控件相关信息
                grid.Margin = new Thickness(0, 0, 20, 0);
                grid.VerticalAlignment = VerticalAlignment.Center;
                grid.HorizontalAlignment = HorizontalAlignment.Left;
                if (fontFamily != "默认")
                {
                    tx.FontFamily = new FontFamily(fontFamily);
                    tx2.FontFamily = new FontFamily(fontFamily);
                }
                tx2.Text = model.DanText;
                tx.Text = model.DanText;
                tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
                tx.Foreground = model.DanColor;
                //弹幕大小
                double size = double.Parse(model.DanSize);
                if (size == 25)
                {
                    tx2.FontSize = fontSize;
                    tx.FontSize = fontSize;
                }
                else
                {
                    tx2.FontSize = fontSize - 2;
                    tx.FontSize = fontSize - 2;
                }

                //grid包含弹幕文本信息
                grid.Children.Add(tx2);
                grid.Children.Add(tx);
                grid.VerticalAlignment = VerticalAlignment.Top;
                grid.HorizontalAlignment = HorizontalAlignment.Left;

                TranslateTransform moveTransform = new TranslateTransform();
                moveTransform.X = grid_Danmu.ActualWidth;
                grid.RenderTransform = moveTransform;
                //将弹幕加载入控件中,并且设置位置
                grid_Danmu.Children.Add(grid);
                Grid.SetRow(grid, row);
                row++;
                if (row == maxRow)
                {
                    row = 0;
                }
                tx2.Margin = new Thickness(1);
                if (Myself)
                {
                    grid.BorderThickness = new Thickness(2);
                    grid.BorderBrush = new SolidColorBrush(Colors.Gray);
                }
                grid.Opacity = Tran;
                grid.DataContext = model;
                //更新弹幕UI,不更新无法获得弹幕的ActualWidth
                grid.UpdateLayout();
                //创建动画
                Duration duration = new Duration(TimeSpan.FromSeconds(Speed));
                DoubleAnimation myDoubleAnimationX = new DoubleAnimation();
                myDoubleAnimationX.Duration = duration;
                //创建故事版
                Storyboard justintimeStoryboard = new Storyboard();
                justintimeStoryboard.Duration = duration;
                myDoubleAnimationX.To = -(grid.ActualWidth);//到达
                justintimeStoryboard.Children.Add(myDoubleAnimationX);
                Storyboard.SetTarget(myDoubleAnimationX, moveTransform);
                //故事版加入动画
                Storyboard.SetTargetProperty(myDoubleAnimationX, "X");
                grid_Danmu.Resources.Remove("justintimeStoryboard");
                grid_Danmu.Resources.Add("justintimeStoryboard", justintimeStoryboard);
                justintimeStoryboard.Begin();
                //等待,暂停则暂停
                await Task.Run(async () =>
                {
                    int i = 0;
                    while (true)
                    {
                        if (!IsPlaying)
                        {
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                                justintimeStoryboard.Pause();
                            });
                            //break;
                        }
                        else
                        {
                            if (i == Speed*2)
                            {
                                break;
                            }
                            i++;
                            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
                                justintimeStoryboard.Resume();
                            });
                        }
                        await Task.Delay(500);
                    }
                });
                grid_Danmu.Children.Remove(grid);
            }
            catch (Exception)
            {
            }
        }
Пример #11
0
        /// <summary>
        /// 移除当前屏幕中的弹幕
        /// </summary>
        public void RemoveDanmu(DanMuModel model)
        {
            foreach (Grid item in grid_Danmu.Children)
            {
                if (item.DataContext== model)
                {
                    grid_Danmu.Children.Remove(item);
                }
            }
            foreach (Grid item in D_Bottom.Children)
            {
                if (item.DataContext == model)
                {
                    D_Bottom.Children.Remove(item);
                }
            }
            foreach (Grid item in D_Top.Children)
            {
                if (item.DataContext == model)
                {
                    D_Top.Children.Remove(item);
                }
            }

        }
Пример #12
0
        private bool Handling = false;//是否正在监听
        /// <summary>
        /// 添加顶部及底部弹幕
        /// </summary>
        /// <param name="model">弹幕参数</param>
        /// <param name="istop">是否顶部</param>
        /// <param name="Myself">是否自己发送的</param>
        public async void AddTopButtomDanmu(DanMuModel model, bool istop,bool Myself)
        {
            TextBlock tx = new TextBlock();
            TextBlock tx2 = new TextBlock();
            Grid grid = new Grid();
            if (fontFamily != "默认")
            {
                tx.FontFamily = new FontFamily(fontFamily);
                tx2.FontFamily = new FontFamily(fontFamily);
            }

                tx2.Text =model.DanText;
                tx.Text = model.DanText ;
            tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            tx.Foreground = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]);
            double size = double.Parse(model.DanSize);
            if (size == 25)
            {
                tx2.FontSize = fontSize;
                tx.FontSize = fontSize;
            }
            else
            {
                tx2.FontSize = fontSize - 2;
                tx.FontSize = fontSize - 2;
            }
            //grid包含弹幕文本信息
            grid.Children.Add(tx2);
            grid.Children.Add(tx);

            // tx.FontSize = Double.Parse(model.DanSize) - fontSize;
            grid.HorizontalAlignment = HorizontalAlignment.Center;
            grid.VerticalAlignment = VerticalAlignment.Top;
            tx2.Margin = new Thickness(1);
            if (Myself)
            {
                grid.BorderThickness = new Thickness(2);
                grid.BorderBrush = new SolidColorBrush(Colors.Gray);
            }
            grid.Opacity = Tran;
            grid.DataContext = model;
            grid.UpdateLayout();

            if (istop)
            {
                D_Top.Children.Add(grid);
                await Task.Delay(5000);
                if (state== MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Top.Children.Remove(grid);
                }
            }
            else
            {
                D_Bottom.Children.Add(grid);
                await Task.Delay(5000);
                if (state == MediaElementState.Paused)
                {
                    ClearTopButtomDanmuku();
                }
                else
                {
                    D_Bottom.Children.Remove(grid);
                }
            }
        }