You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2090 lines
82 KiB
2090 lines
82 KiB
using Container.Business;
|
|
using Container.Common;
|
|
using Container.Model;
|
|
using Container.Services;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Sockets;
|
|
using System.Reflection;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Interop;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Animation;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Shapes;
|
|
using System.Windows.Threading;
|
|
using Transitionals;
|
|
|
|
namespace Container.Win
|
|
{
|
|
/// <summary>
|
|
/// WindowViewNew.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class WindowViewNew : Window
|
|
{
|
|
double beginX = 0;
|
|
double endX = 0;
|
|
double beginY = 0;
|
|
double endY = 0;
|
|
//bool isSysProg = true;
|
|
//DispatcherTimer VCDTimer = new DispatcherTimer();//停止播放视频的定时器
|
|
//DispatcherTimer GCTimer = new DispatcherTimer();
|
|
//DispatcherTimer ProgramSyncTimer = new DispatcherTimer();//停止播放视频的定时器
|
|
|
|
//private List<Tuple<UserControl, Transition, ResInfo, bool>> ucListSys = new List<Tuple<UserControl, Transition, ResInfo, bool>>();//记录最新的屏保列表
|
|
//private List<Tuple<UserControl, Transition, ResInfo, bool>> ucNewsList = new List<Tuple<UserControl, Transition, ResInfo, bool>>(); //记录插播列表
|
|
//private List<Tuple<UserControl, Transition, ResInfo, bool>> ucList = new List<Tuple<UserControl, Transition, ResInfo, bool>>(); //记录插播列表
|
|
private DateTime? curLoadDate;
|
|
DispatcherTimer LoadScreenTimer = new DispatcherTimer();//隔天加载节目
|
|
DispatcherTimer LoadProgIsSync = new DispatcherTimer();//隔天加载节目
|
|
PlayBackManage pbm;
|
|
//private int duration = 0;//视频总时长;
|
|
//int currentTime = 0;
|
|
//int ImageShowTime = 0;
|
|
App app = ((App)Application.Current);
|
|
Class_Log log = new Class_Log();
|
|
//UserControl MyUc = new UserControl();
|
|
//bool isplay = false;
|
|
//public bool isclose = false;
|
|
//public bool Mainclose = false;
|
|
MouseHook mh = new MouseHook();
|
|
// WebSocketManage web = new WebSocketManage();
|
|
//private List<DateTime> navDateList = new List<DateTime>();
|
|
//WebSocketForFaceManage webForFace = new WebSocketForFaceManage();
|
|
//WebSocketForProgram webForProgram = new WebSocketForProgram();
|
|
JService jService = new JService();
|
|
private double percentHeight = 1;
|
|
int isShowCountDown = 0;
|
|
List<PlayMaterial> videoList = new List<PlayMaterial>();
|
|
/// <summary>
|
|
/// 鼠标位置数组
|
|
/// </summary>
|
|
ArrayList Points = new ArrayList();//
|
|
IntPtr hWaitTimer = IntPtr.Zero;
|
|
//ProgControl progControl = new ProgControl();
|
|
List<CancellationTokenSource> sourceList = new List<CancellationTokenSource>();
|
|
//public ObservableCollection<NavGuide> ItemsList { get; set; } = new ObservableCollection<NavGuide>();
|
|
string outLinePath;
|
|
bool IsPlayEnd = false;
|
|
DateTime? PlayEndTime = null;
|
|
DirectoryInfo vlcLibDirectory;
|
|
int curPlayIndex = 0;
|
|
UCImageText ucimg = new UCImageText();
|
|
string ScreenMatch = "拉伸";
|
|
//string ScreenMatch = "适应";
|
|
Stretch stretch = Stretch.Fill;
|
|
// Stretch stretch = Stretch.Uniform;
|
|
List<CancellationTokenSource> cancellationTokens = new List<CancellationTokenSource>();
|
|
public WindowViewNew(int type = 1)
|
|
{
|
|
InitializeComponent();
|
|
isShowCountDown = type;
|
|
this.Width = app.ScreenWidth;
|
|
this.Height = app.ScreenHeight;
|
|
outLinePath = AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles";
|
|
pbm = new PlayBackManage();
|
|
mh.SetHook();
|
|
mh.MouseClickEvent += this_MouseClickDown;
|
|
|
|
try
|
|
{
|
|
//Application.ExecutablePathSystem.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").Substring(0, System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").LastIndexOf("/"))
|
|
string strImages = System.Environment.CurrentDirectory + "\\pic\\bg.png";//AppDomain.CurrentDomain.BaseDirectory + "pic\\common\\bg.png";
|
|
if (File.Exists(strImages) == true)
|
|
{
|
|
Uri uri = new Uri(strImages, UriKind.Absolute);
|
|
ImageBrush ib = new ImageBrush();
|
|
ib.ImageSource = new BitmapImage(uri);
|
|
this.waiting.Background = ib;
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "WindowViewErrorlog");
|
|
}
|
|
}
|
|
|
|
private void MediaPlayer_EndReached(object sender, Vlc.DotNet.Core.VlcMediaPlayerEndReachedEventArgs e)
|
|
{
|
|
//Task.Factory.StartNew(() => {
|
|
// //this.sourceProvider = null;
|
|
// Application.Current.Dispatcher.BeginInvoke(new Action(() => {
|
|
// mainVideo.SourceProvider.MediaPlayer.Play(vlcVideoPath);
|
|
// }));
|
|
//});
|
|
|
|
|
|
if (app.isProgramServer)
|
|
{
|
|
log.WriteLogFile("发送", "发送");
|
|
SendPlay(curPlayIndex);
|
|
if (!app.isProgramSync)
|
|
{
|
|
PlayProg();
|
|
}
|
|
//PlayEnd(media1, media, curIndex);
|
|
|
|
}
|
|
else if (!app.isProgramSync)
|
|
{
|
|
PlayProg();
|
|
}
|
|
|
|
|
|
//PlayProg();
|
|
|
|
}
|
|
//private void MediaPlayer1_EndReached(object sender, Vlc.DotNet.Core.VlcMediaPlayerEndReachedEventArgs e)
|
|
//{
|
|
// //Task.Factory.StartNew(() => {
|
|
// // //this.sourceProvider = null;
|
|
// // Application.Current.Dispatcher.BeginInvoke(new Action(() => {
|
|
// // mainVideo.SourceProvider.MediaPlayer.Play(vlcVideoPath);
|
|
// // }));
|
|
// //});
|
|
|
|
|
|
// if (app.isProgramServer)
|
|
// {
|
|
// log.WriteLogFile("发送", "发送");
|
|
// SendPlay(curPlayIndex);
|
|
// //PlayEnd(media1, media, curIndex);
|
|
|
|
// }
|
|
// else if (!app.isProgramSync)
|
|
// {
|
|
// PlayProg();
|
|
// }
|
|
|
|
|
|
// //PlayProg();
|
|
|
|
//}
|
|
|
|
///// <summary>
|
|
///// 修改系统分辨率
|
|
///// </summary>
|
|
///// <param name="t">分辨率,单位为毫秒</param>
|
|
///// <returns>返回值</returns>
|
|
//[DllImport("winmm.dll")]
|
|
//public static extern uint timeBeginPeriod(int t);
|
|
|
|
///// <summary>
|
|
///// 恢复系统分辨率
|
|
///// </summary>
|
|
///// <param name="t">分辨率,单位为毫秒</param>
|
|
///// <returns>返回值</returns>
|
|
//[DllImport("winmm.dll")]
|
|
//public static extern uint timeEndPeriod(int t);
|
|
|
|
private void LoadScreen(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
jService.GetSyncDev();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.Message, "error");
|
|
}
|
|
if (curLoadDate.HasValue && curLoadDate.Value.Date != DateTime.Now.Date)
|
|
{
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
//item.Dispose();
|
|
}
|
|
}
|
|
curLoadDate = DateTime.Now;
|
|
sourceList.Clear();
|
|
pbm.DownResource();
|
|
//Action action = new Action(() => {
|
|
GetUControl();
|
|
//});
|
|
//action.BeginInvoke(null, null);
|
|
}
|
|
|
|
}
|
|
|
|
private void LoadPics()
|
|
{
|
|
try
|
|
{
|
|
Storyboard _storyboard = new Storyboard();
|
|
for (int i = 0; i < 220; i++)
|
|
{
|
|
|
|
ObjectAnimationUsingKeyFrames oauf = new ObjectAnimationUsingKeyFrames();
|
|
//ObjectAnimationUsingKeyFrames 可以对指定 Duration 内的一组 KeyFrames 中的 Object 属性值进行动画处理
|
|
BitmapImage bitmap = new BitmapImage();
|
|
bitmap.BeginInit();
|
|
string name = i.ToString().PadLeft(5, '0');
|
|
bitmap.UriSource = new Uri("pack://application:,,,/Container;component/image/CountDowmImage/倒计时透明度_" + name + ".png");
|
|
bitmap.CacheOption = BitmapCacheOption.Default;
|
|
bitmap.EndInit();
|
|
bitmap.Freeze();
|
|
ImageBrush imgBrush = new ImageBrush(bitmap);
|
|
//读取图片文件
|
|
DiscreteObjectKeyFrame dokf = new DiscreteObjectKeyFrame();
|
|
//DiscreteObjectKeyFrame 通过使用离散内插,可以在前一个关键帧的 Object 值及其自己的 Value 之间进行动画处理。
|
|
dokf.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(i * 30));
|
|
//KeyTime 获取或设置应到达关键帧的目标 Value 的时间
|
|
//这里每隔40毫秒设置一张图片,也就是每秒1000/40=25帧
|
|
dokf.Value = imgBrush;
|
|
imgBrush.Freeze();
|
|
oauf.KeyFrames.Add(dokf);
|
|
dokf.Freeze();
|
|
Storyboard.SetTargetProperty(oauf, new PropertyPath("(Rectangle.Fill)"));
|
|
//把动画应用到窗体的Rectangle中
|
|
Storyboard.SetTarget(oauf, RectDisImage);
|
|
//RectDis是Rectangle的名称
|
|
_storyboard.Children.Add(oauf);
|
|
oauf.Freeze();
|
|
//把ObjectAnimationUsingKeyFrames动画添加到Storyboard中
|
|
}
|
|
_storyboard.Completed += new EventHandler(time_Completed);
|
|
//_storyboard.RepeatBehavior = RepeatBehavior.Forever;
|
|
_storyboard.Begin();
|
|
_storyboard.Freeze();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
log.WriteLogFile(ex.Message, "error");
|
|
}
|
|
}
|
|
|
|
void time_Completed(object sender, EventArgs e)
|
|
{
|
|
timeGrid.Visibility = Visibility.Hidden;
|
|
gridMain.Visibility = Visibility.Visible;
|
|
LoadData();
|
|
}
|
|
|
|
private void LoadData()
|
|
{
|
|
try
|
|
{
|
|
//timeBeginPeriod(1);
|
|
this.EventsRegistion(); // 注册事件
|
|
this.LoadScreenTimer.Interval = TimeSpan.FromMinutes(1); //垃圾释放定时器 我定为每十分钟释放一次,大家可根据需要修改
|
|
this.LoadProgIsSync.Interval = TimeSpan.FromSeconds(5);
|
|
this.LoadScreenTimer.Start();
|
|
this.LoadProgIsSync.Start();
|
|
|
|
pbm.DownResource();
|
|
WebSocketForProgram.WebSocketReceiveEvent += new WebSocketForProgram.WebSocketReceiveDelegate(WebSocketManage_WebSocketReceiveEvent);
|
|
JService.ScreenConfigReceiveEvent += new JService.ScreenConfigDelegate(ScreenConfig_ReceiveEvent);
|
|
//this.GCTimer.Interval = TimeSpan.FromMinutes(30); //垃圾释放定时器 我定为每十分钟释放一次,大家可根据需要修改
|
|
//this.GCTimer.Start();
|
|
Action action = new Action(() =>
|
|
{
|
|
jService.GetSyncDev();
|
|
jService.SetPlayRecord();
|
|
});
|
|
action.BeginInvoke(null, null);
|
|
|
|
RectDis.Dispatcher.Invoke(() =>
|
|
{
|
|
if (app.screensaver.ScreenType == 0 || (app.AppList.Count == 0 && string.IsNullOrEmpty(app.configstartexe)))
|
|
{
|
|
_canvas.Visibility = Visibility.Hidden;
|
|
}
|
|
else if (app.screensaver.ScreenType < 5)
|
|
{
|
|
_canvas.Visibility = Visibility.Visible;
|
|
RectDis.Visibility = Visibility.Visible;
|
|
gridImage.Visibility = Visibility.Hidden;
|
|
LoadPics(app.screensaver.ScreenType);
|
|
}
|
|
else if (!string.IsNullOrEmpty(app.screensaver.ScreenFile))
|
|
{
|
|
|
|
string fileExtension = System.IO.Path.GetExtension(app.screensaver.ScreenFile);
|
|
if (fileExtension.ToLower() == ".gif")
|
|
{
|
|
_canvas.Visibility = Visibility.Visible;
|
|
RectDis.Visibility = Visibility.Hidden;
|
|
gridImage.Visibility = Visibility.Hidden;
|
|
GifImageLib.GifImage image = new GifImageLib.GifImage();
|
|
image.Source = app.screensaver.ScreenFile;
|
|
image.Width = 300;
|
|
image.Height = 300;
|
|
image.Background = new SolidColorBrush(Colors.Transparent);
|
|
gridmove.Children.Add(image);
|
|
}
|
|
else
|
|
{
|
|
_canvas.Visibility = Visibility.Visible;
|
|
RectDis.Visibility = Visibility.Hidden;
|
|
gridImage.Visibility = Visibility.Visible;
|
|
Uri uri = new Uri(app.screensaver.ScreenFile, UriKind.Absolute);
|
|
gridImage.Source = new BitmapImage(uri);
|
|
}
|
|
}
|
|
if (app.screensaver.ScreenEffect == 1)
|
|
{
|
|
LoadGif();
|
|
if (app.screensaver.EffectType == 0)
|
|
{
|
|
gridmove.Margin = new Thickness(0, (_canvas.Height - gridmove.Height) / 2, 0, (_canvas.Height - gridmove.Height) / 2);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if (app.screensaver.EffectType == 0)
|
|
{
|
|
gridmove.Margin = new Thickness((_canvas.Width - gridmove.Width), (_canvas.Height - gridmove.Height), 0, 0);
|
|
}
|
|
else
|
|
{
|
|
gridmove.Margin = new Thickness((_canvas.Width - gridmove.Width) / 2, (_canvas.Height - gridmove.Height) / 2, (_canvas.Width - gridmove.Width) / 2, (_canvas.Height - gridmove.Height) / 2);
|
|
}
|
|
}
|
|
});
|
|
StartPlay();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.WriteLogFile(e.ToString(), "WindowViewErrorlog");
|
|
}
|
|
}
|
|
|
|
private void WindowView_Load(object sender, RoutedEventArgs e)
|
|
{
|
|
//try
|
|
//{
|
|
// var hwndSource = PresentationSource.FromVisual(this) as HwndSource;
|
|
// var hwndTarget = hwndSource.CompositionTarget;
|
|
// hwndTarget.RenderMode = RenderMode.SoftwareOnly;
|
|
//}
|
|
//catch (Exception ex)
|
|
//{
|
|
// log.WriteLogFile(ex.ToString(), "WinView");
|
|
//}
|
|
|
|
try
|
|
{
|
|
//LoadScoket();
|
|
this.Width = app.ScreenWidth;
|
|
this.Height = app.ScreenHeight;
|
|
percentHeight = app.ScreenHeight / 3840;
|
|
tbMessage.FontSize = 30 * percentHeight;
|
|
_canvas.Height = 2000 * percentHeight;
|
|
_canvas.Width = app.ScreenWidth;
|
|
gridmove.Width = app.ScreenWidth > 1920 ? 600 : 300;
|
|
gridmove.Height = app.ScreenWidth > 1920 ? 600 : 300;
|
|
gridImage.Width = app.ScreenWidth > 1920 ? 600 : 300;
|
|
gridImage.Height = app.ScreenWidth > 1920 ? 600 : 300;
|
|
RectDis.Width = app.ScreenWidth > 1920 ? 600 : 300;
|
|
RectDis.Height = app.ScreenWidth > 1920 ? 600 : 300;
|
|
mainp.Width = app.ScreenWidth;
|
|
mainp.Height = app.ScreenHeight;
|
|
//mainVideo.Width = app.ScreenWidth;
|
|
//mainVideo.Height = app.ScreenHeight;
|
|
//mainVideo1.Width = app.ScreenWidth;
|
|
//mainVideo1.Height = app.ScreenHeight;
|
|
gifPlay.Width = app.ScreenWidth;
|
|
gifPlay.Height = app.ScreenHeight;
|
|
mainVideo.Width = app.ScreenWidth;
|
|
mainVideo.Height = app.ScreenHeight;
|
|
ShowCursor(0);
|
|
|
|
|
|
if (isShowCountDown == 1)
|
|
{
|
|
LoadPics();
|
|
}
|
|
else
|
|
{
|
|
timeGrid.Visibility = Visibility.Hidden;
|
|
gridMain.Visibility = Visibility.Visible;
|
|
LoadData();
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "WindowViewErrorlog");
|
|
}
|
|
|
|
}
|
|
|
|
private void ScreenConfig_ReceiveEvent()
|
|
{
|
|
try
|
|
{
|
|
log.WriteLogFile("进来了", "screenconfig1");
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
GetUControl();
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.WriteLogFile(e.ToString(), "error");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
[DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]
|
|
public static extern void ShowCursor(int status);
|
|
|
|
//void OnGarbageCollection(object sender, EventArgs e)
|
|
//{
|
|
// GC.Collect();
|
|
// GC.WaitForPendingFinalizers();
|
|
// GC.Collect();
|
|
//}
|
|
|
|
public void EventsRegistion()
|
|
{
|
|
this.LoadScreenTimer.Tick += new EventHandler(LoadScreen);
|
|
this.LoadProgIsSync.Tick += new EventHandler(LoadProgSync);
|
|
//this.GCTimer.Tick += new EventHandler(OnGarbageCollection);
|
|
}
|
|
|
|
public void LoadProgSync(object sender, EventArgs e)
|
|
{
|
|
//if (IsPlayEnd && PlayEndTime.HasValue && PlayEndTime.Value.AddSeconds(3) < DateTime.Now)
|
|
//{
|
|
// media.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// int curIndex = 0;
|
|
// int zindex = Canvas.GetZIndex(media);
|
|
// if (zindex == 1)
|
|
// {
|
|
// List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// string curUrl = media.Source.ToString();
|
|
// string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// if (videoList.Count > 1)
|
|
// {
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
// }
|
|
// PlayEnd(media1, media, curIndex);
|
|
// }
|
|
// else
|
|
// {
|
|
// List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// string curUrl = media1.Source.ToString();
|
|
// string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// if (videoList.Count > 1)
|
|
// {
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
// }
|
|
// PlayEnd(media, media1, curIndex);
|
|
// }
|
|
// }));
|
|
//}
|
|
}
|
|
|
|
|
|
|
|
private void WindowView_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
|
|
log.WriteLogFile("进入关闭屏保" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
//timeEndPeriod(1);
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
log.WriteLogFile("进入关闭屏保1" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
if (app.isProgramServer)
|
|
{
|
|
app.websocketForProgramServer.CloasSocket();
|
|
app.websocketForProgramServer = null;
|
|
app.isProgramServer = false;
|
|
app.websocketProgramIP = "";
|
|
}
|
|
log.WriteLogFile("进入关闭屏保2" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
if (app.isProgramSync)
|
|
{
|
|
app.webSocketForProgram.CloseWebSocket();
|
|
app.webSocketForProgram = null;
|
|
app.isProgramSync = false;
|
|
app.websocketProgramIP = "";
|
|
}
|
|
log.WriteLogFile("进入关闭屏保3" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
//progControl.Dispose();
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
//item.Dispose();
|
|
}
|
|
}
|
|
log.WriteLogFile("进入关闭屏保4" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
sourceList.Clear();
|
|
StopVideo();
|
|
log.WriteLogFile("进入关闭屏保5" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
log.WriteLogFile("进入关闭屏保6" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
FulshMemor();
|
|
//if (GCTimer != null)
|
|
// GCTimer.Stop();
|
|
if (LoadScreenTimer != null)
|
|
LoadScreenTimer.Stop();
|
|
log.WriteLogFile("进入关闭屏保7" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
mh.UnHook();
|
|
log.WriteLogFile("关闭屏保" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
//webForFace.CloseWebSocket();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile("--------" + ex.ToString(), "WindowViewErrorlog");
|
|
}
|
|
try
|
|
{
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "WindowViewErrorlog");
|
|
}
|
|
}
|
|
|
|
public void FulshMemor()
|
|
{
|
|
try
|
|
{
|
|
//SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
|
|
//GC.Collect();
|
|
//Mouse.OverrideCursor = Cursors.None;
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, IntPtr lpTimerName);
|
|
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern bool SetWaitableTimer(IntPtr hTimer, ref long pDueTime,
|
|
long lPeriod, int pfnCompletionRoutine, // TimerCompleteDelegate
|
|
int lpArgToCompletionRoutine, bool fResume);
|
|
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern UInt32 MsgWaitForMultipleObjects(uint nCount, ref IntPtr pHandles,
|
|
bool bWaitAll, int dwMilliseconds, uint dwWakeMask);
|
|
|
|
|
|
[DllImport("Kernel32.dll")]
|
|
public static extern UInt32 WaitForSingleObject(IntPtr pHandles, int dwMilliseconds);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern bool CloseHandle(IntPtr hObject);
|
|
|
|
|
|
public const int NULL = 0;
|
|
public const int QS_TIMER = 0x10;
|
|
|
|
public void UsDelay(long us)
|
|
{
|
|
long duetime = -1 * us;
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
if (hWaitTimer == IntPtr.Zero)
|
|
{
|
|
hWaitTimer = CreateWaitableTimer(IntPtr.Zero, true, IntPtr.Zero);
|
|
bool flag = SetWaitableTimer(hWaitTimer, ref duetime, 0, NULL, NULL, false);
|
|
UInt32 isFlag = WaitForSingleObject(hWaitTimer, Timeout.Infinite);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 根据获取到的信息生成UseControl
|
|
/// </summary>
|
|
private void GetUControl()
|
|
{
|
|
try
|
|
{
|
|
FulshMemor();
|
|
List<ProgModel> result = pbm.GetResource();
|
|
if (result == null || result.Count == 0)
|
|
{
|
|
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
//if (media.CanPause)
|
|
// media.Pause();
|
|
//if (media1.CanPause)
|
|
// media1.Pause();
|
|
//foreach (var item in mainp.Children)
|
|
//{
|
|
// var mediaClear = (MediaElement)item;
|
|
// mediaClear.Stop();
|
|
// mediaClear.Close();
|
|
|
|
//}
|
|
//mainp.Children.Clear();
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
//item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
//progControl.Dispose();
|
|
StopVideo();
|
|
mainp.Visibility = Visibility.Hidden;
|
|
waiting.Visibility = Visibility.Visible;
|
|
}));
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
//item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
StopVideo();
|
|
mainp.Visibility = Visibility.Visible;
|
|
waiting.Visibility = Visibility.Hidden;
|
|
}));
|
|
}
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
LoadScheduler(result);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "WindowViewErrorlog");
|
|
}
|
|
}
|
|
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
|
|
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
|
|
|
|
private bool LoadScheduler(List<ProgModel> progList)
|
|
{
|
|
bool isScheduler = false;
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
try
|
|
{
|
|
progList = progList.Where(i => Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + i.endTime) > DateTime.Now).OrderBy(i => i.beginTime).ToList();
|
|
if (progList != null && progList.Count > 0)
|
|
{
|
|
if (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + progList[0].beginTime) <= DateTime.Now)
|
|
{
|
|
PlayScheduler(progList[0]);
|
|
Action action = new Action(() =>
|
|
{
|
|
var curDate = DateTime.Now;
|
|
var stopTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + progList[0].endTime);
|
|
UsDelay((stopTime.Ticks - curDate.Ticks));
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
LoadScheduler(progList);
|
|
});
|
|
action.BeginInvoke(null, null);
|
|
}
|
|
else
|
|
{
|
|
app.currentIndex = -1;
|
|
Action action = new Action(() =>
|
|
{
|
|
var curDate = DateTime.Now;
|
|
var stopTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + progList[0].beginTime);
|
|
UsDelay((stopTime.Ticks - curDate.Ticks));
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
PlayScheduler(progList[0]);
|
|
Action action1 = new Action(() =>
|
|
{
|
|
curDate = DateTime.Now;
|
|
stopTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + progList[0].endTime);
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
curDate = DateTime.Now;
|
|
UsDelay((stopTime.Ticks - curDate.Ticks));
|
|
|
|
LoadScheduler(progList);
|
|
});
|
|
action1.BeginInvoke(null, null);
|
|
});
|
|
action.BeginInvoke(null, null);
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
//if(media.CanPause)
|
|
//media.Pause();
|
|
//if (media1.CanPause)
|
|
// media1.Pause();
|
|
//foreach (var item in mainp.Children)
|
|
//{
|
|
// var mediaClear = (MediaElement)item;
|
|
// mediaClear.Stop();
|
|
// mediaClear.Close();
|
|
|
|
//}
|
|
//mainp.Children.Clear();
|
|
//progControl.Dispose();
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
//item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
StopVideo();
|
|
mainp.Visibility = Visibility.Hidden;
|
|
waiting.Visibility = Visibility.Visible;
|
|
}));
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
//if (media.CanPause)
|
|
// media.Pause();
|
|
//if (media1.CanPause)
|
|
// media1.Pause();
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
StopVideo();
|
|
//progControl.Dispose();
|
|
mainp.Visibility = Visibility.Hidden;
|
|
waiting.Visibility = Visibility.Visible;
|
|
}));
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString());
|
|
}
|
|
return isScheduler;
|
|
}
|
|
|
|
//private async void PlayScheduler(ProgModel scheduler)
|
|
//{
|
|
// try
|
|
// {
|
|
|
|
// //Task tsk1 = factory.StartNew(() =>
|
|
// //{
|
|
// foreach (var item in sourceList)
|
|
// {
|
|
// if (!item.Token.IsCancellationRequested)
|
|
// {
|
|
// item.Cancel();
|
|
// item.Dispose();
|
|
// }
|
|
// }
|
|
// sourceList.Clear();
|
|
// Transition transition = CommonMethod.GetTransition("渐入");
|
|
// if (scheduler != null && scheduler.programs != null && scheduler.programs.Count > 0)
|
|
// {
|
|
// this.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// mainp.Visibility = Visibility.Visible;
|
|
// waiting.Visibility = Visibility.Hidden;
|
|
// }));
|
|
// var playIndex = 0;
|
|
// CancellationTokenSource source1 = new CancellationTokenSource();
|
|
// sourceList.Add(source1);
|
|
// while (true)
|
|
// {
|
|
// if (source1.Token.IsCancellationRequested)
|
|
// {
|
|
// //isStop = true;
|
|
// // 释放资源操作等等...
|
|
// break;
|
|
// }
|
|
// //if (!curDate.HasValue || curDate.Value.AddMilliseconds(duration) <= DateTime.Now)
|
|
// //{
|
|
// var item = scheduler.programs[playIndex];
|
|
// this.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// progControl.Dispose();
|
|
// progControl.LoadProg(this.Width, this.Height, item.backgroundMaterialInfo, item.backgroundColor, item.components);
|
|
|
|
// mainp.Content = progControl;
|
|
// playIndex++;
|
|
// if (playIndex >= scheduler.programs.Count)
|
|
// {
|
|
// playIndex = 0;
|
|
|
|
// }
|
|
// }));
|
|
// TimeSpan.TryParse(item.duration, out TimeSpan timeSpan);
|
|
// if (source1.Token.IsCancellationRequested)
|
|
// {
|
|
// break;
|
|
// }
|
|
// else
|
|
// {
|
|
// try
|
|
// {
|
|
// await Task.Delay(Convert.ToInt32(timeSpan.TotalMilliseconds), source1.Token);
|
|
// }
|
|
// catch (Exception)
|
|
// {
|
|
|
|
// break;
|
|
// }
|
|
// }
|
|
|
|
// //await Task.Delay(Convert.ToInt32(timeSpan.TotalMilliseconds), source1.Token);
|
|
// //}
|
|
// //else
|
|
// //{
|
|
// // Task.Delay(10,token);
|
|
// //}
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// this.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// mainp.Visibility = Visibility.Hidden;
|
|
// waiting.Visibility = Visibility.Visible;
|
|
// }));
|
|
// }
|
|
|
|
// //});
|
|
|
|
// }
|
|
// catch (Exception e)
|
|
// {
|
|
|
|
// log.WriteLogFile(e.ToString());
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
private async void PlayScheduler(ProgModel scheduler)
|
|
{
|
|
try
|
|
{
|
|
|
|
//Task tsk1 = factory.StartNew(() =>
|
|
//{
|
|
log.WriteLogFile(JsonConvert.SerializeObject(scheduler), "22222");
|
|
try
|
|
{
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
log.WriteLogFile("取消定时", "token");
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.WriteLogFile(e.ToString(), "PlaySchedulerError");
|
|
}
|
|
if (scheduler != null && scheduler.programs != null && scheduler.programs.Count > 0)
|
|
{
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
mainp.Visibility = Visibility.Visible;
|
|
waiting.Visibility = Visibility.Hidden;
|
|
}));
|
|
//var videoList= scheduler.programs.Where(i=>i.components.).Select(i=>i.components)
|
|
List<PlayMaterial> videoNow = new List<PlayMaterial>();
|
|
string backCorlor = string.Empty;
|
|
foreach (var item in scheduler.programs)
|
|
{
|
|
var videoProg = item.components.Where(i => i.typeCode == "video" || i.typeCode == "image").OrderBy(i => i.zIndex).ToList();
|
|
foreach (var itemVideo in videoProg)
|
|
{
|
|
videoNow.AddRange(itemVideo.materials.OrderBy(i => i.order).Select(i => new
|
|
PlayMaterial
|
|
{
|
|
duration = i.duration,
|
|
fileHash = i.fileHash,
|
|
fileUrl = i.fileUrl,
|
|
materialCode = i.materialCode,
|
|
name = i.name,
|
|
order = i.order,
|
|
mediaInfo = i.mediaInfo,
|
|
config = itemVideo.config,
|
|
typeCode = itemVideo.typeCode
|
|
}).ToList());
|
|
}
|
|
if (string.IsNullOrEmpty(item.backgroundColor))
|
|
{
|
|
backCorlor = item.backgroundColor;
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(backCorlor))
|
|
{
|
|
Color color = (Color)ColorConverter.ConvertFromString(backCorlor);
|
|
mainp.Background = new SolidColorBrush(color);
|
|
}
|
|
videoList.Clear();
|
|
videoList.AddRange(videoNow);
|
|
if (videoList.Count > 0)
|
|
{
|
|
log.WriteLogFile("进入", "222");
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
//if (media.CanPause)
|
|
//{
|
|
// media.Pause();
|
|
//}
|
|
//if (media1.CanPause)
|
|
//{
|
|
// media1.Pause();
|
|
//}
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
StopVideo();
|
|
curPlayIndex = 0;
|
|
|
|
|
|
PlayProg();
|
|
//if (app.isProgramServer)
|
|
//{
|
|
// log.WriteLogFile("发送", "发送");
|
|
// SendPlay(curPlayIndex);
|
|
// //PlayEnd(media1, media, curIndex);
|
|
|
|
//}
|
|
//else if (!app.isProgramSync)
|
|
//{
|
|
// PlayProg();
|
|
//}
|
|
//mainVideo.SourceProvider.MediaPlayer.Pause();
|
|
mainp.Visibility = Visibility.Visible;
|
|
waiting.Visibility = Visibility.Hidden;
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
StopVideo();
|
|
//mainVideo.SourceProvider.MediaPlayer.Pause();
|
|
curPlayIndex = 0;
|
|
//PlayProg();
|
|
mainp.Visibility = Visibility.Hidden;
|
|
waiting.Visibility = Visibility.Visible;
|
|
}));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var mediaClear = (MediaElement)item;
|
|
mediaClear.Stop();
|
|
mediaClear.Close();
|
|
|
|
}
|
|
mainVideo.Children.Clear();
|
|
|
|
mainp.Visibility = Visibility.Hidden;
|
|
waiting.Visibility = Visibility.Visible;
|
|
}));
|
|
}
|
|
|
|
//});
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString());
|
|
}
|
|
|
|
}
|
|
|
|
private void PlayProg()
|
|
{
|
|
try
|
|
{
|
|
if (videoList.Count == 0)
|
|
{
|
|
log.WriteLogFile("进来了", "token");
|
|
return;
|
|
}
|
|
if (curPlayIndex >= videoList.Count)
|
|
{
|
|
curPlayIndex = 0;
|
|
}
|
|
Transition transition = CommonMethod.GetTransition("渐入");
|
|
string fileExtension = string.Empty;
|
|
string url = string.Empty;
|
|
foreach (var item in sourceList)
|
|
{
|
|
if (!item.Token.IsCancellationRequested)
|
|
{
|
|
item.Cancel();
|
|
item.Dispose();
|
|
}
|
|
}
|
|
sourceList.Clear();
|
|
if (videoList[curPlayIndex].fileUrl.Contains("?"))
|
|
{
|
|
fileExtension = videoList[curPlayIndex].fileUrl.Substring(videoList[curPlayIndex].fileUrl.LastIndexOf("."), videoList[curPlayIndex].fileUrl.LastIndexOf("?") - videoList[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower();
|
|
}
|
|
else
|
|
{
|
|
fileExtension = videoList[curPlayIndex].fileUrl.Substring(videoList[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower();
|
|
}
|
|
url = outLinePath + "/Main/" + videoList[curPlayIndex].fileHash + fileExtension;
|
|
log.WriteLogFile(url, "file");
|
|
var ext = fileExtension.ToLower().Split('.').Last();
|
|
FileTypeJudgment fvdo = new FileTypeJudgment() { TypeTarget = new TypeVideo() };
|
|
log.WriteLogFile(fileExtension.ToLower(), "file");
|
|
log.WriteLogFile(fvdo.Judge(ext).ToString(), "file");
|
|
if (fvdo.Judge(ext))
|
|
{
|
|
StartVideo(url, videoList[curPlayIndex].fileHash);
|
|
}
|
|
else
|
|
{
|
|
if (mainVideo.Visibility == Visibility.Visible)
|
|
{
|
|
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
mainVideo.Visibility = Visibility.Hidden;
|
|
});
|
|
}
|
|
PlayImage(videoList[curPlayIndex], url);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.WriteLogFile("---" + e.ToString(), "333");
|
|
|
|
if (e.ToString().Contains("指定的参数已超出有效值的范围"))
|
|
{
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
app.main.WinView = this;
|
|
});
|
|
}
|
|
else
|
|
{
|
|
ScreenConfig_ReceiveEvent();
|
|
}
|
|
//await Task.Delay(new TimeSpan(0,0,0,1));
|
|
//Thread.Sleep(1000);
|
|
//PlayProg();
|
|
|
|
}
|
|
}
|
|
|
|
private async void StartVideo(string videoPath, string fileHash)
|
|
{
|
|
try
|
|
{
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
mainImage.Visibility = Visibility.Hidden;
|
|
});
|
|
|
|
|
|
|
|
if (mainVideo.Visibility == Visibility.Hidden)
|
|
{
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
mainVideo.Visibility = Visibility.Visible;
|
|
});
|
|
}
|
|
|
|
mainVideo.Dispatcher.Invoke(() =>
|
|
{
|
|
mainVideo.Children.Clear();
|
|
|
|
MediaElement media = new MediaElement();
|
|
//media.Dispatcher.Invoke(new Action(() =>
|
|
//{
|
|
|
|
media.LoadedBehavior = MediaState.Manual;
|
|
media.Stretch = stretch;
|
|
media.Width = app.ScreenWidth;
|
|
media.Height = app.ScreenHeight;
|
|
media.Source = new Uri(videoPath);
|
|
media.MediaEnded += media_MediaEnded;
|
|
media.Play();
|
|
mainVideo.Children.Add(media);
|
|
});
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString(), "videoError");
|
|
}
|
|
//try
|
|
//{
|
|
|
|
// Task.Factory.StartNew(() => {
|
|
// if (mainVideo.Visibility == Visibility.Visible) {
|
|
// mainVideo.SourceProvider.MediaPlayer.Pause();
|
|
// mainVideo1.SourceProvider.MediaPlayer.Play(new Uri(videoPath));
|
|
// } else {
|
|
// if (mainVideo1.Visibility == Visibility.Visible)
|
|
// {
|
|
// mainVideo1.SourceProvider.MediaPlayer.Pause();
|
|
// }
|
|
// mainVideo.SourceProvider.MediaPlayer.Play(new Uri(videoPath));
|
|
// }
|
|
|
|
// });
|
|
//}
|
|
//catch (Exception ex)
|
|
//{
|
|
// log.WriteLogFile(videoPath + ex.ToString(), "StopVideoError");
|
|
//}
|
|
}
|
|
|
|
|
|
|
|
private void seeyou(MediaElement mep)
|
|
{
|
|
//bool isseeyou = true;
|
|
//double allTime = 0;
|
|
//int index = curPlayIndex;
|
|
//string x = "";
|
|
//string y = "";
|
|
//string isseeyous = mep?.Position.ToString();
|
|
//log.WriteLogFile("开始时长" + isseeyous, "seeyou");
|
|
//int t = 0;
|
|
//Task ta = new Task(() =>
|
|
//{
|
|
// while (isseeyou && index == curPlayIndex)
|
|
// {
|
|
// try
|
|
// {
|
|
// Thread.Sleep(1000);
|
|
|
|
// if (string.IsNullOrEmpty(x))
|
|
// {
|
|
// Thread.Sleep(1000);
|
|
|
|
|
|
// try
|
|
// {
|
|
// this.Dispatcher.Invoke(() =>
|
|
// {
|
|
// if (mep.NaturalDuration.HasTimeSpan)
|
|
// {
|
|
// x = mep?.NaturalDuration.TimeSpan.ToString();
|
|
// allTime = mep.NaturalDuration.TimeSpan.TotalSeconds;
|
|
// log.WriteLogFile("总时长秒:" + allTime, "seeyou");
|
|
// }
|
|
// }
|
|
// );
|
|
// log.WriteLogFile("总时长:" + x, "seeyou");
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// log.WriteLogFile(ex.ToString(), "seeyou");
|
|
// }
|
|
|
|
// }
|
|
|
|
// this.Dispatcher.Invoke(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// y = mep?.Position.ToString();
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// y = y + "0";
|
|
// log.WriteLogFile(ex.ToString(), "seeyou");
|
|
// }
|
|
|
|
// });
|
|
|
|
|
|
// if (isseeyous.Equals(y))
|
|
// {
|
|
// log.WriteLogFile("没在播" + Environment.NewLine + isseeyous + Environment.NewLine + y, "seeyou");
|
|
// t++;
|
|
// }
|
|
// else
|
|
// {
|
|
// if (t != 0)
|
|
// {
|
|
// t = 0;
|
|
// }
|
|
// log.WriteLogFile("正常播呢", "seeyous");
|
|
// isseeyous = y;
|
|
// }
|
|
|
|
// //C#中的TimeSpan.Compare()方法用于比较两个TimeSpan值,并返回一个整数,该整数指示第一个值是小于,等于还是大于第二个值。
|
|
|
|
// //如果span1小于span2,则返回值为 - 1;如果span1 = span2,则返回值为0;如果span1大于span2,则返回值为1。
|
|
// try
|
|
// {
|
|
// log.WriteLogFile(mep.Position.TotalSeconds.ToString(), "CountTe");
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// log.WriteLogFile(ex.ToString(), "seeyou");
|
|
// }
|
|
// if (!string.IsNullOrEmpty(x) && !(allTime > mep.Position.TotalSeconds))
|
|
// {
|
|
// log.WriteLogFile("播完了", "seeyous");
|
|
// isseeyou = false; ;
|
|
// }
|
|
|
|
|
|
// if (t > 2 && isseeyou && curPlayIndex == index && !string.IsNullOrEmpty(x))
|
|
// {
|
|
// isseeyou = false;
|
|
// log.WriteLogFile("异常了,准备关了重开" + Environment.NewLine + x + Environment.NewLine + y, "seeyouErr");
|
|
// this.Dispatcher.Invoke(() =>
|
|
// {
|
|
// app.main.WinView = this;
|
|
// });
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// log.WriteLogFile(ex.ToString(), "seeyou");
|
|
// }
|
|
// }
|
|
//});
|
|
//ta.Start();
|
|
}
|
|
|
|
private void StopVideo()
|
|
{
|
|
//try
|
|
//{
|
|
// //myControl.SourceProvider.MediaPlayer.Pause();
|
|
// //this.myControl.Dispose();
|
|
// if (mainVideo.SourceProvider.MediaPlayer.IsPlaying()) {
|
|
// mainVideo.SourceProvider.MediaPlayer.Pause();
|
|
// }
|
|
// if (mainVideo1.SourceProvider.MediaPlayer.IsPlaying())
|
|
// {
|
|
// mainVideo1.SourceProvider.MediaPlayer.Pause();
|
|
// }
|
|
|
|
|
|
//}
|
|
//catch (Exception e)
|
|
//{
|
|
|
|
// //log.WriteLogFile(videoUrl + e.ToString(), "StopVideoError");
|
|
//}
|
|
}
|
|
|
|
private void PlayImage(PlayMaterial material, string url)
|
|
{
|
|
try
|
|
{
|
|
log.WriteLogFile("播放111", "file");
|
|
|
|
CancellationTokenSource source1 = new CancellationTokenSource();
|
|
sourceList.Add(source1);
|
|
CancellationToken token = source1.Token;
|
|
TaskFactory factory = new TaskFactory(token);
|
|
Task tsk1 = factory.StartNew(async () =>
|
|
{
|
|
log.WriteLogFile("播放12222", "file");
|
|
try
|
|
{
|
|
|
|
|
|
var transitionPeriod = material.config.Value<int>("transitionPeriod");
|
|
var transition = material.config.Value<string>("transition");
|
|
string fileExtension = string.Empty;
|
|
if (fileExtension.ToLower() == ".gif")
|
|
{
|
|
GC.Collect();
|
|
mainImage.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
FileStream s = new FileStream(url, FileMode.Open, FileAccess.Read);
|
|
// XamlAnimatedGif.AnimationBehavior.SetSourceUri(gifPlay, new Uri(outLinePath + "/Main/" + ucList[app.currentIndex].sourceId + fileExtension));
|
|
|
|
XamlAnimatedGif.AnimationBehavior.SetSourceStream(gifPlay, s);
|
|
XamlAnimatedGif.AnimationBehavior.SetRepeatBehavior(gifPlay, RepeatBehavior.Forever);
|
|
XamlAnimatedGif.AnimationBehavior.SetAutoStart(gifPlay, true);
|
|
gifPlay.Visibility = Visibility.Visible;
|
|
mainImage.Visibility = Visibility.Hidden;
|
|
mainVideo.Visibility = Visibility.Hidden;
|
|
//mainVideo1.Visibility = Visibility.Hidden;
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
mainImage.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
ucimg.LoadData(this.Width, this.Height, url, "", ScreenMatch);
|
|
|
|
mainImage.Content = ucimg;
|
|
mainVideo.Visibility = Visibility.Hidden;
|
|
// mainVideo1.Visibility = Visibility.Hidden;
|
|
gifPlay.Visibility = Visibility.Hidden;
|
|
mainImage.Visibility = Visibility.Visible;
|
|
log.WriteLogFile("播放", "file");
|
|
}));
|
|
}
|
|
await Task.Delay(transitionPeriod * 1000, token);
|
|
log.WriteLogFile(token.IsCancellationRequested.ToString(), "token");
|
|
|
|
if (!token.IsCancellationRequested)
|
|
{
|
|
|
|
|
|
if (app.isProgramServer)
|
|
{
|
|
log.WriteLogFile("发送", "发送");
|
|
curPlayIndex++;
|
|
SendPlay(curPlayIndex);
|
|
if (!app.isProgramSync)
|
|
{
|
|
PlayProg();
|
|
}
|
|
//PlayEnd(media1, media, curIndex);
|
|
|
|
}
|
|
else if (!app.isProgramSync)
|
|
{
|
|
curPlayIndex++;
|
|
PlayProg();
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile("---" + e.ToString(), "fileerror");
|
|
}
|
|
});
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString(), "fileerror");
|
|
}
|
|
}
|
|
|
|
private void BindImage(Image image, string img, string transition)
|
|
{
|
|
Action action = new Action(() =>
|
|
{
|
|
image.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
if (img.ToLower().EndsWith(".gif"))
|
|
{
|
|
//FileStream stream = new FileStream(img, FileMode.Open, FileAccess.Read);
|
|
//XamlAnimatedGif.AnimationBehavior.SetSourceStream(image, stream);
|
|
//FileStream s = new FileStream(outLinePath + "/Main/" + ucList[app.currentIndex].sourceId + fileExtension, FileMode.Open, FileAccess.Read);
|
|
XamlAnimatedGif.AnimationBehavior.SetSourceUri(image, new Uri(img));
|
|
XamlAnimatedGif.AnimationBehavior.SetRepeatBehavior(image, RepeatBehavior.Forever);
|
|
XamlAnimatedGif.AnimationBehavior.SetAutoStart(image, true);
|
|
}
|
|
else
|
|
{
|
|
image.Source = new BitmapImage(new Uri(img));
|
|
}
|
|
}));
|
|
});
|
|
action.BeginInvoke(null, null);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 开始播放
|
|
/// </summary>
|
|
private void StartPlay()
|
|
{
|
|
curLoadDate = DateTime.Now;
|
|
GetUControl();
|
|
|
|
}
|
|
|
|
|
|
private void this_MouseClickDown(object sender, System.Windows.Forms.MouseEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
|
|
if (e.Button == System.Windows.Forms.MouseButtons.Left) //|| e.Button == System.Windows.Forms.MouseButtons.Right
|
|
{
|
|
//点击翻页
|
|
//Point p = new Point(e.Location.X, e.Location.Y);
|
|
//if (p.X < this.Width / 2)
|
|
//{
|
|
// app.currentIndex -= 2;
|
|
// while (app.currentIndex < 0)
|
|
// {
|
|
// app.currentIndex = ucList.Count + app.currentIndex;
|
|
// }
|
|
//}
|
|
//if (isMedia)
|
|
//{
|
|
// isMedia = false;
|
|
// SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
|
|
//}
|
|
//else
|
|
//{
|
|
// ImageShowTime = 0;
|
|
//}
|
|
|
|
//------------------
|
|
//点击关闭
|
|
Point p = new Point(e.Location.X, e.Location.Y);
|
|
Points.Add(p);
|
|
if (Points.Count == 5)
|
|
Points.Remove(Points[0]);
|
|
if (Points.Count > 4)
|
|
Points.Clear();
|
|
else if (Points.Count == 4 && p.X < 100 && p.Y > this.Height - 100)
|
|
{
|
|
p = (Point)Points[2];
|
|
if (p.X < 100 && p.Y > this.Height - 100)
|
|
{
|
|
p = (Point)Points[1];
|
|
if (p.X < 100 && p.Y > this.Height - 100)
|
|
{
|
|
p = (Point)Points[0];
|
|
if (p.X < 100 && p.Y > this.Height - 100)
|
|
{
|
|
this.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//------------------
|
|
}
|
|
//Mouse.OverrideCursor = Cursors.Arrow;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Class_Log log = new Class_Log();
|
|
log.WriteLogFile("记录鼠标位置异常" + ex.ToString(), "MainWindowErrorLog");
|
|
|
|
}
|
|
}
|
|
|
|
private void LoadPics(int type)
|
|
{
|
|
try
|
|
{
|
|
Storyboard _storyboard = new Storyboard();
|
|
int count = 99;
|
|
if (type < 3)
|
|
{
|
|
count = 68;
|
|
}
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
ObjectAnimationUsingKeyFrames oauf = new ObjectAnimationUsingKeyFrames();
|
|
//ObjectAnimationUsingKeyFrames 可以对指定 Duration 内的一组 KeyFrames 中的 Object 属性值进行动画处理
|
|
BitmapImage bitmap = new BitmapImage();
|
|
bitmap.BeginInit();
|
|
string name = i.ToString().PadLeft(5, '0');
|
|
bitmap.UriSource = new Uri("pack://application:,,,/Container;component/touch/touch" + type + "/touch_" + name + ".png");
|
|
log.WriteLogFile(bitmap.UriSource.AbsolutePath, "file");
|
|
bitmap.CacheOption = BitmapCacheOption.Default;
|
|
bitmap.EndInit();
|
|
bitmap.Freeze();
|
|
ImageBrush imgBrush = new ImageBrush(bitmap);
|
|
//读取图片文件
|
|
DiscreteObjectKeyFrame dokf = new DiscreteObjectKeyFrame();
|
|
//DiscreteObjectKeyFrame 通过使用离散内插,可以在前一个关键帧的 Object 值及其自己的 Value 之间进行动画处理。
|
|
dokf.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(i * 30));
|
|
//KeyTime 获取或设置应到达关键帧的目标 Value 的时间
|
|
//这里每隔40毫秒设置一张图片,也就是每秒1000/40=25帧
|
|
dokf.Value = imgBrush;
|
|
imgBrush.Freeze();
|
|
oauf.KeyFrames.Add(dokf);
|
|
dokf.Freeze();
|
|
Storyboard.SetTargetProperty(oauf, new PropertyPath("(Rectangle.Fill)"));
|
|
//把动画应用到窗体的Rectangle中
|
|
Storyboard.SetTarget(oauf, RectDis);
|
|
//RectDis是Rectangle的名称
|
|
_storyboard.Children.Add(oauf);
|
|
oauf.Freeze();
|
|
//把ObjectAnimationUsingKeyFrames动画添加到Storyboard中
|
|
}
|
|
_storyboard.RepeatBehavior = RepeatBehavior.Forever;
|
|
_storyboard.Begin();
|
|
_storyboard.Freeze();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
log.WriteLogFile(ex.Message, "error");
|
|
}
|
|
}
|
|
|
|
|
|
private void LoadGif()
|
|
{
|
|
endX = _canvas.Width - gridmove.Width;
|
|
Random ran = new Random();
|
|
endY = ran.Next(0, Convert.ToInt32(_canvas.Height - gridmove.Height)); ;
|
|
ss();
|
|
}
|
|
|
|
void ss_Completed(object sender, EventArgs e)
|
|
{
|
|
Random ran = new Random();
|
|
beginX = endX;
|
|
beginY = endY;
|
|
if (app.screensaver.EffectType == 1)
|
|
{
|
|
if (endX >= _canvas.Width - gridmove.Width)
|
|
{
|
|
if (endY >= (_canvas.Height - gridmove.Width) / 2)
|
|
{
|
|
endX = ran.Next(0, Convert.ToInt32((_canvas.Width - gridmove.Width) / 2));
|
|
endY = _canvas.Height - gridmove.Height;
|
|
}
|
|
else
|
|
{
|
|
endX = ran.Next(0, Convert.ToInt32((_canvas.Width - gridmove.Width) / 2));
|
|
endY = 0;
|
|
}
|
|
}
|
|
else if (endX == 0)
|
|
{
|
|
if (endY >= (_canvas.Height - gridmove.Height) / 2)
|
|
{
|
|
endX = ran.Next(Convert.ToInt32((_canvas.Width - gridmove.Width) / 2), Convert.ToInt32(_canvas.Width - gridmove.Width));
|
|
endY = 0;
|
|
|
|
}
|
|
else
|
|
{
|
|
endX = ran.Next(Convert.ToInt32((_canvas.Width - gridmove.Width) / 2), Convert.ToInt32(_canvas.Width - gridmove.Width));
|
|
endY = _canvas.Height - gridmove.Height;
|
|
}
|
|
}
|
|
else
|
|
|
|
if (endY == _canvas.Height - gridmove.Height)
|
|
{
|
|
if (endX >= (_canvas.Width - gridmove.Width) / 2)
|
|
{
|
|
endY = ran.Next(0, Convert.ToInt32((_canvas.Height - gridmove.Height) / 2));
|
|
endX = _canvas.Width - gridmove.Width;
|
|
}
|
|
else
|
|
{
|
|
endY = ran.Next(0, Convert.ToInt32((_canvas.Height - gridmove.Height) / 2));
|
|
endX = 0;
|
|
}
|
|
}
|
|
else if (endY == 0)
|
|
{
|
|
if (endX >= (_canvas.Width - gridmove.Width) / 2)
|
|
{
|
|
endY = ran.Next(Convert.ToInt32((_canvas.Height - gridmove.Height) / 2), Convert.ToInt32(_canvas.Height - gridmove.Height));
|
|
|
|
endX = _canvas.Width - gridmove.Width;
|
|
}
|
|
else
|
|
{
|
|
endY = ran.Next(Convert.ToInt32((_canvas.Height - gridmove.Height) / 2), Convert.ToInt32(_canvas.Height - gridmove.Height));
|
|
|
|
endX = 0;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (beginX == 0)
|
|
{
|
|
endX = _canvas.Width - gridmove.Width;
|
|
}
|
|
else
|
|
{
|
|
endX = 0;
|
|
}
|
|
}
|
|
ss();
|
|
}
|
|
|
|
void ss()
|
|
{
|
|
var x = endX - beginX;
|
|
var y = endY - beginY;
|
|
var z = Math.Sqrt(x * x + y * y);
|
|
var time = z / 200;
|
|
DoubleAnimation DAnimation = new DoubleAnimation();
|
|
DAnimation.From = beginX;//起点
|
|
DAnimation.To = endX;//终点
|
|
DAnimation.Duration = new Duration(TimeSpan.FromSeconds(time));//时间
|
|
|
|
Storyboard.SetTarget(DAnimation, gridmove);
|
|
Storyboard.SetTargetProperty(DAnimation, new PropertyPath(Canvas.LeftProperty));
|
|
|
|
Storyboard story = new Storyboard();
|
|
story.Completed += new EventHandler(ss_Completed);//完成后要做的事
|
|
//story.RepeatBehavior = RepeatBehavior.Forever;//无限次循环,需要的自己加上
|
|
if (app.screensaver.EffectType == 1)
|
|
{
|
|
DoubleAnimation DAnimation1 = new DoubleAnimation();
|
|
DAnimation1.From = beginY;//起点
|
|
DAnimation1.To = endY;//终点
|
|
DAnimation1.Duration = new Duration(TimeSpan.FromSeconds(time));//时间
|
|
Storyboard.SetTarget(DAnimation1, gridmove);
|
|
Storyboard.SetTargetProperty(DAnimation1, new PropertyPath(Canvas.TopProperty));
|
|
story.Children.Add(DAnimation1);
|
|
}
|
|
story.Children.Add(DAnimation);
|
|
DAnimation.Freeze();
|
|
story.Begin();
|
|
story.Freeze();
|
|
}
|
|
|
|
private void media_MediaEnded(object sender, RoutedEventArgs e)
|
|
{
|
|
//MediaElement media = (MediaElement)sender;
|
|
//int curIndex = 0;
|
|
//List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
//string curUrl = media.Source.ToString();
|
|
//string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
//if (videoList.Count > 1)
|
|
//{
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
//}
|
|
|
|
if (app.isProgramServer)
|
|
{
|
|
curPlayIndex++;
|
|
log.WriteLogFile("发送", "发送");
|
|
SendPlay(curPlayIndex);
|
|
if (!app.isProgramSync)
|
|
{
|
|
PlayProg();
|
|
}
|
|
//PlayEnd(media1, media, curIndex);
|
|
|
|
}
|
|
else if (!app.isProgramSync)
|
|
{
|
|
curPlayIndex++;
|
|
PlayProg();
|
|
// PlayEnd((MediaElement)mainp.Children[mainp.Children.Count-1], (MediaElement)mainp.Children[mainp.Children.Count - 2], curIndex);
|
|
}
|
|
else
|
|
{
|
|
IsPlayEnd = true;
|
|
PlayEndTime = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
//private void media1_MediaEnded(object sender, RoutedEventArgs e)
|
|
//{
|
|
// //string fileExtensionCur = string.Empty;
|
|
// //string urlCur = string.Empty;
|
|
// //List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// //string curUrl = media1.Source.ToString();
|
|
// //string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// //var curIndex = 0;
|
|
// //if (videoList.Count > 1)
|
|
// //{
|
|
// // curIndex = hashList.ToList().IndexOf(curHash);
|
|
// // if (curIndex + 2 >= videoList.Count)
|
|
// // {
|
|
// // curIndex = curIndex + 2 - videoList.Count;
|
|
// // }
|
|
// // else
|
|
// // {
|
|
// // curIndex = curIndex + 2;
|
|
// // }
|
|
// //}
|
|
// ////if (curIndex >= item.materials.Count)
|
|
// ////{
|
|
// //// curIndex = 0;
|
|
// ////}
|
|
// //if (videoList[curIndex].fileUrl.Contains("?"))
|
|
// //{
|
|
// // fileExtensionCur = videoList[curIndex].fileUrl.Substring(videoList[curIndex].fileUrl.LastIndexOf("."), videoList[curIndex].fileUrl.LastIndexOf("?") - videoList[curIndex].fileUrl.LastIndexOf(".")).ToLower();
|
|
// //}
|
|
// //else
|
|
// //{
|
|
// // fileExtensionCur = videoList[curIndex].fileUrl.Substring(videoList[curIndex].fileUrl.LastIndexOf(".")).ToLower();
|
|
// //}
|
|
// //urlCur = outLinePath + "/Main/" + videoList[curIndex].fileHash + fileExtensionCur;
|
|
// //media1.Play();
|
|
// //media.Play();
|
|
// //Thread.Sleep(500);
|
|
// //Canvas.SetZIndex(media, 2);
|
|
// //Canvas.SetZIndex(media1, 0);
|
|
// //Canvas.SetZIndex(media, 1);
|
|
// //media1.Source = new Uri(urlCur);
|
|
// //media1.Play();
|
|
// //media1.Pause();
|
|
|
|
|
|
// int curIndex = 0;
|
|
// List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// string curUrl = media1.Source.ToString();
|
|
// string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// if (videoList.Count > 1)
|
|
// {
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
// }
|
|
// if (app.isProgramServer)
|
|
// {
|
|
// log.WriteLogFile("fas", "发送");
|
|
// //PlayEnd(media, media1, curIndex);
|
|
// SendPlay(curIndex);
|
|
// }
|
|
// else if (!app.isProgramSync)
|
|
// {
|
|
// PlayEnd(media, media1, curIndex);
|
|
// }
|
|
// else
|
|
// {
|
|
// IsPlayEnd = true;
|
|
// PlayEndTime = DateTime.Now;
|
|
// }
|
|
//}
|
|
|
|
|
|
|
|
private void SendPlay(int curIndex)
|
|
{
|
|
app.isSendSync = true;
|
|
try
|
|
{
|
|
log.WriteLogFile(WebsocketForProgramServer.allSockets.ToList().ToString() + " " + curIndex, "发送");
|
|
WebsocketForProgramServer.allSockets.ToList().ForEach(s => s.Send(curIndex.ToString()));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString(), "StartPlayerror");
|
|
}
|
|
|
|
}
|
|
|
|
private void WebSocketManage_WebSocketReceiveEvent(string type, string message)
|
|
{
|
|
try
|
|
{
|
|
log.WriteLogFile(message, "WebSocketLogProg");
|
|
if (type == "play")
|
|
{
|
|
int curIndex = Convert.ToInt32(message);
|
|
if (curIndex >= videoList.Count)
|
|
{
|
|
curIndex = 0;
|
|
}
|
|
//if (!app.isProgramServer)
|
|
//{
|
|
curPlayIndex = curIndex;
|
|
mainp.Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
foreach (var item in mainVideo.Children)
|
|
{
|
|
var videoPlay = (MediaElement)item;
|
|
if (videoPlay.CanPause)
|
|
{
|
|
videoPlay.Pause();
|
|
}
|
|
|
|
}
|
|
PlayProg();
|
|
}));
|
|
|
|
|
|
//}
|
|
}
|
|
//else if (type == "close") {
|
|
// media.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// int curIndex = 0;
|
|
// int zindex = Canvas.GetZIndex(media);
|
|
// if (zindex == 1)
|
|
// {
|
|
// List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// string curUrl = media.Source.ToString();
|
|
// string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// if (videoList.Count > 1)
|
|
// {
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
// }
|
|
// PlayEnd(media1, media, curIndex);
|
|
// }
|
|
// else
|
|
// {
|
|
// List<string> hashList = videoList.Select(i => i.fileHash).ToList();
|
|
// string curUrl = media1.Source.ToString();
|
|
// string curHash = curUrl.Substring(curUrl.LastIndexOf("/") + 1, curUrl.LastIndexOf(".") - curUrl.LastIndexOf("/") - 1);
|
|
// if (videoList.Count > 1)
|
|
// {
|
|
// curIndex = hashList.ToList().IndexOf(curHash);
|
|
// if (curIndex + 2 >= videoList.Count)
|
|
// {
|
|
// curIndex = curIndex + 2 - videoList.Count;
|
|
// }
|
|
// else
|
|
// {
|
|
// curIndex = curIndex + 2;
|
|
// }
|
|
// }
|
|
// PlayEnd(media, media1, curIndex);
|
|
// }
|
|
// }));
|
|
//}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "errorsocket");
|
|
}
|
|
|
|
}
|
|
|
|
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
log.WriteLogFile("点击屏保,进入关闭屏保方法" + DateTime.Now.TimeOfDay.ToString(), "closewin");
|
|
if (!string.IsNullOrEmpty(app.configstartexe))
|
|
{
|
|
app.isStartScreen = false;
|
|
//关闭信息发布
|
|
//Process[] pro = Process.GetProcesses();
|
|
//for (int i = 0; i < pro.Length; i++)
|
|
//{
|
|
// if (pro[i].ProcessName.ToLower().Trim() == "pcscreensavers")
|
|
// {
|
|
// pro[i].Kill();//结束进程
|
|
// }
|
|
//}
|
|
|
|
app.AppPlayNameCH = "导视";
|
|
app.Appversion = app.kioskVersion;
|
|
app.AppPlayName = "chrome";
|
|
app.CurAppPlayName = app.AppPlayName;
|
|
|
|
WebSocketForKiosk.allSocketsForKiosk.ToList().ForEach(s => s.Send("kiosk"));
|
|
//webForFace.CloseWebSocket();
|
|
FulshMemor();
|
|
if (hWaitTimer != IntPtr.Zero)
|
|
{
|
|
CloseHandle(hWaitTimer);
|
|
hWaitTimer = IntPtr.Zero;
|
|
}
|
|
//source1.Cancel();
|
|
//source1.Dispose();
|
|
this.Dispatcher.Invoke((Action)(() =>
|
|
{
|
|
this.Close();
|
|
}));
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString());
|
|
}
|
|
}
|
|
|
|
//private void media1_MediaFailed(object sender, ExceptionRoutedEventArgs e)
|
|
//{
|
|
// log.WriteLogFile("卡了1", "mediaerror");
|
|
// //media1.Close();
|
|
|
|
// media1.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// media1.Stop();
|
|
// media1.Position = new TimeSpan(0,0,0,0,100);
|
|
// media1.Play();
|
|
// }));
|
|
//}
|
|
|
|
//private void media_MediaFailed(object sender, ExceptionRoutedEventArgs e)
|
|
//{
|
|
// log.WriteLogFile("卡了", "mediaerror");
|
|
// media.Dispatcher.Invoke(new Action(() =>
|
|
// {
|
|
// media.Stop();
|
|
// media.Position = new TimeSpan(0, 0, 0, 0, 100);
|
|
// media.Play();
|
|
// }));
|
|
//}
|
|
}
|
|
}
|
|
|