using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace SunVoteARSPPT
{
public delegate void OnPvsBaseConnectEvent(int ID, int iStatus);
public delegate void OnPvsBaseEvent(int ID, int iMode, string sInfo);
public delegate void OnPvsKeyEvent(int ID, int iMode, string sInfo);
public delegate void OnPvsKeyVote(int ID, int iMode, string sInfo);
public delegate void OnPvsCommErrSys(string ID, int ErrNo, string ErrInfo);
public delegate void OnPvsCommErrEx(string ID, int ErrNo, string ErrInfo);
public partial class FrmPvsServer : Form
{
public FrmPvsServer()
{
InitializeComponent();
}
private static FrmPvsServer frmPvs = null;
public static PVSServer.MyPVS GetMyPvs()
{
return GetFrmPvs().InitPvs();
}
public static FrmPvsServer GetFrmPvs()
{
if (frmPvs == null)
{
frmPvs = new FrmPvsServer();
frmPvs.Show();
}
return frmPvs;
}
///
/// 释放PVS,杨斌 2015-04-14
///
public static void FreeMyPvs()
{
if (frmPvs != null)
{
frmPvs.PvsStop();
frmPvs.PVS.BaseConnectClose();
frmPvs.PVS = null;
frmPvs.Close();
frmPvs = null;
KillProcess("PVSServer");
GC.Collect();
}
}
public static void KillProcess(string processName)
{
try
{
foreach (Process thisproc in Process.GetProcessesByName(processName))//循环查找
{
//if (!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
}
catch { }
}
private PVSServer.MyPVS PVS = null;
public OnPvsBaseConnectEvent OnBaseConnectEvent = null;
public OnPvsBaseEvent OnBaseEvent = null;
public OnPvsKeyEvent OnKeyEvent = null;
public OnPvsKeyVote OnKeyVote = null;
public OnPvsCommErrSys OnCommErrSys = null;
public OnPvsCommErrEx OnCommErrEx = null;
private void FrmPvsServer_Load(object sender, EventArgs e)
{
this.Hide();
this.ShowInTaskbar = false;
}
private PVSServer.MyPVS InitPvs()
{
if ((PVS == null) && (IntPtr.Size == 4))
{
PVS = new PVSServer.MyPVS();
PVS.BaseEvent += PVS_BaseEvent;
PVS.BaseConnectEvent += PVS_BaseConnectEvent;
PVS.CommErrEx += PVS_CommErrEx;
PVS.CommErrSys += PVS_CommErrSys;
PVS.KeyEvent += PVS_KeyEvent;
PVS.KeyVote += PVS_KeyVote;
tmrGet.Elapsed += tmrGet_Elapsed;
//tmrGet.Tick += tmrGet_Tick;
}
return PVS;
}
private void FrmPvsServer_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
PvsStop();//杨斌 2015-04-14
PVS = null;
}
catch { }
}
void PVS_BaseConnectEvent(int ID, int iStatus)
{
if (OnBaseConnectEvent != null)
this.BeginInvoke(OnBaseConnectEvent, ID, iStatus);
//this.BeginInvoke(new OnPvsBaseConnectEvent(PVS_PvsOnBaseConnectEvent), ID, iStatus);
}
void PVS_BaseEvent(int ID, int iMode, string sInfo)
{
if (OnBaseEvent != null)
this.BeginInvoke(OnBaseEvent, ID, iMode, sInfo);
}
void PVS_KeyEvent(int ID, int iMode, string sInfo)
{
if (OnKeyEvent != null)
this.BeginInvoke(OnKeyEvent, ID, iMode, sInfo);
}
///
/// 收到按键值缓冲。避免卡死。杨斌 2015-03-27
///
private List LstGetKeyVote = new List();
void PVS_KeyVote(int ID, int iMode, string sInfo)
{
//杨斌 2015-03-27
//if (OnKeyVote != null)
// this.BeginInvoke(OnKeyVote, ID, iMode, sInfo);
if (VoteModifyMode == 0)//不允许修改,PVS键盘不支持,软件屏蔽。杨斌 2015-11-10
{
string sID = ID.ToString();
if (GlobalInfo.response.ResponseDataList.Contains(sID))
{
if (!string.IsNullOrEmpty(GlobalInfo.response.ResponseDataList[sID].KeyValue))
return;
}
if (LstGetKeyVote.Exists(o => o.ID == ID))
{
return;
}
}
LstGetKeyVote.Add(new KeyVoteRes() { ID = ID, iMode = iMode, sInfo = sInfo });
if (!tmrGet.Enabled)
{
tmrGet.Interval = 10;
tmrGet.Enabled = true;
}
}
void PVS_CommErrSys(string ID, int ErrNo, string ErrInfo)
{
if (OnCommErrSys != null)
this.BeginInvoke(OnCommErrSys, ID, ErrNo, ErrInfo);
}
void PVS_CommErrEx(string ID, int ErrNo, string ErrInfo)
{
if (OnCommErrEx != null)
this.BeginInvoke(OnCommErrEx, ID, ErrNo, ErrInfo);
}
private int VoteModifyMode = 1;
public void VoteStart(int voteMode, string voteSetting, int iModifyMode = 1)
{
VoteModifyMode = iModifyMode;
Action