private NotifyMessageItem[] ParseMessage(byte[] data) { var list = new List <NotifyMessageItem>(); var stream = new MemoryStream(data); using (var reader = new BinaryReader(stream)) { while (reader.PeekChar() == 1) { reader.ReadChar(); var tableName = reader.ReadString(); var table = DBService.Schems.ParseTable(tableName); while (reader.PeekChar() == 2) { reader.ReadChar(); var item = new NotifyMessageItem { Table = table, Type = (DBLogType)reader.ReadInt32(), UserId = reader.ReadInt32(), ItemId = Helper.ReadBinary(reader), }; if (table != null) { list.Add(item); } } } } return(list.ToArray()); }
/// <summary> /// 发布一个成就通知到通知队列中并处理队列 /// </summary> /// <param name="label">通知的标题</param> /// <param name="detail">通知的具体内容</param> /// <param name="icoFilename">通知的图标</param> public static void Notify(string label, string detail, string icoFilename = "") { var nti = new NotifyMessageItem() { Label = label, Detail = detail, IconFilename = icoFilename }; lock (NotificationManager.pendingMessages) { NotificationManager.pendingMessages.Enqueue(nti); } NotificationManager.HandleNotificationQueue(); }
/// <summary> /// 执行通知动画 /// </summary> private static void ApplyNotificationAnimation(NotifyMessageItem nti) { Storyboard story = new Storyboard(); var beginRight = Canvas.GetRight(NotificationManager.BoxUI); var toRight = NotificationManager.DeltaBoxRight; DoubleAnimationUsingKeyFrames daukf_translate = new DoubleAnimationUsingKeyFrames(); EasingDoubleKeyFrame k1_translate = new EasingDoubleKeyFrame(toRight, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS))); EasingDoubleKeyFrame k2_translate = new EasingDoubleKeyFrame(toRight, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS + nti.PendingMs))); EasingDoubleKeyFrame k3_translate = new EasingDoubleKeyFrame(beginRight, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS * 2 + nti.PendingMs))); EasingDoubleKeyFrame k4_translate = new EasingDoubleKeyFrame(beginRight, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS * 3 + nti.PendingMs))); k1_translate.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; k3_translate.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseIn }; daukf_translate.KeyFrames.Add(k1_translate); daukf_translate.KeyFrames.Add(k2_translate); daukf_translate.KeyFrames.Add(k3_translate); daukf_translate.KeyFrames.Add(k4_translate); Storyboard.SetTarget(daukf_translate, NotificationManager.BoxUI); Storyboard.SetTargetProperty(daukf_translate, new PropertyPath(Canvas.RightProperty)); DoubleAnimationUsingKeyFrames daukf_opacity = new DoubleAnimationUsingKeyFrames(); EasingDoubleKeyFrame k1_opacity = new EasingDoubleKeyFrame(1.0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS))); EasingDoubleKeyFrame k2_opacity = new EasingDoubleKeyFrame(1.0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS + nti.PendingMs))); EasingDoubleKeyFrame k3_opacity = new EasingDoubleKeyFrame(0.0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS * 2 + nti.PendingMs))); EasingDoubleKeyFrame k4_opacity = new EasingDoubleKeyFrame(0.0, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(AnimationTimeMS * 3 + nti.PendingMs))); daukf_opacity.KeyFrames.Add(k1_opacity); daukf_opacity.KeyFrames.Add(k2_opacity); daukf_opacity.KeyFrames.Add(k3_opacity); daukf_opacity.KeyFrames.Add(k4_opacity); Storyboard.SetTarget(daukf_opacity, NotificationManager.BoxUI); Storyboard.SetTargetProperty(daukf_opacity, new PropertyPath(Canvas.OpacityProperty)); story.Children.Add(daukf_translate); story.Children.Add(daukf_opacity); story.FillBehavior = FillBehavior.Stop; story.Completed += delegate { NotificationManager.IsNotificating = false; NotificationManager.HandleNotificationQueue(); }; story.Begin(); }