⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outdevicemanage.cpp

📁 学习java的经典教程源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OutDeviceManage.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "OutDeviceManage.h"
#include <time.h>

const BYTE HEAT_BREAK[16] = {
							 0XFF,0XFF,0XFF,0XFF,
							 0X00,0X00,0X00,0X00,
							 0X00,0X00,0X00,0X00,
							 0X00,0XFE,0XEE,0XEE
							};
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}

COutDeviceManage::~COutDeviceManage()
{	
	//清除ConnectOutDevice
	std::map<int, ConnectOutDevice*>::iterator itConnect;
	for (itConnect=m_ConnectList.begin(); itConnect!=m_ConnectList.end(); itConnect++)
	{
		ConnectOutDevice* pconn = &*(itConnect->second);
		if (pconn)
		{
			delete pconn;
			pconn = NULL;
		}		
	}
	m_ConnectList.erase(m_ConnectList.begin(), m_ConnectList.end());

	//清除ManageOneDev
	std::map<int, ManageOneDev*>::iterator itdev;
	lock a(m_readwrite_mutex);
	for (itdev=m_outdevlist.begin(); itdev!=m_outdevlist.end(); itdev++)
	{
		ManageOneDev* pdev = &*(itdev->second);
		if (pdev)
		{
			delete pdev;
			pdev = NULL;
		}
	}
	m_outdevlist.erase(m_outdevlist.begin(), m_outdevlist.end());	
}


void    COutDeviceManage::ReplayFn(unsigned int dsid, unsigned int fnid) //fn掉线重连后重新播放 
{
//						lock a(m_readwrite_mutex);//读写锁
	
	std::map<int, ManageOneDev*>::iterator itDev;
	for (itDev=m_outdevlist.begin(); itDev!=m_outdevlist.end(); itDev++) //遍历m_outdevlist
	{
		ManageOneDev* pdev = itDev->second;
		if ( (pdev->m_curDsId == dsid) && (pdev->m_curFnId==fnid))
		{
			int ntemdsid, ntemfnid;
			ntemdsid = ntemfnid = 0;
			pdev->GetBhOfRealId(dsid, fnid, &ntemdsid, &ntemfnid);
			if (ntemdsid>0 && ntemfnid>0)
			{
				pdev->m_temdsid = ntemdsid;
				pdev->m_temfnid = ntemfnid;
			}

			pdev->OpenOneFn();
			pdev->SetCurState(selected_fn);
		}
	}
}


void COutDeviceManage::Init()
{	
    DeviceControlCommand devicecontrolcommand;
	
	char cNportIp[20];
	GetPrivateProfileString("NPORT","IP",NULL,cNportIp,100,devicecontrolcommand.m_DCINIPath);//得到Nport的IP
	int nDevNum = GetPrivateProfileInt("DEVNUM","NUM",0,devicecontrolcommand.m_DCINIPath);//得到Nport的数量
	for (int i=0; i<nDevNum; i++)
	{
		//bh
		char dev[20];
		sprintf(dev, "DEV%d", i);
		int nDevBh = GetPrivateProfileInt(dev,"BH",0,devicecontrolcommand.m_DCINIPath);//得到Nport的编号
		
		//port
		int nPort = GetPrivateProfileInt(dev,"PORT",0,devicecontrolcommand.m_DCINIPath); //得到Nport的端口

		//jmqip
		char cjmqip[20];
		GetPrivateProfileString(dev,"JMQIP",NULL,cjmqip,100,devicecontrolcommand.m_DCINIPath);//得到解码器的IP
		
		//last ds fn
		int nLastDs = GetPrivateProfileInt(dev,"DSID",0,devicecontrolcommand.m_DCINIPath);//得到上一次切换的dsid
		int nLastFn = GetPrivateProfileInt(dev,"FNID",0,devicecontrolcommand.m_DCINIPath);//得到上一次切换的fnid
		
		
		int nJMQPORT = GetPrivateProfileInt(dev,"JMQPORT",0,devicecontrolcommand.m_DCINIPath); //得到解码器开放的端口
		//new ManageOneDev 
		ManageOneDev* pManageOneDev = new ManageOneDev(nDevBh, cjmqip, nLastDs, nLastFn, m_MainHwnd,nJMQPORT);
		if (pManageOneDev)
		{
			m_outdevlist.insert(pair<int,ManageOneDev*>(nDevBh, pManageOneDev));//将Nport的编号对应插入ManageOneDev列表		
		}
		
		//new ConnectOutDevice 
		ConnectOutDevice* pConnectOutDevice = new ConnectOutDevice(nDevBh, cNportIp, nPort, this);
		if (pConnectOutDevice)
		{
			m_ConnectList.insert(pair<int, ConnectOutDevice*>(nDevBh, pConnectOutDevice));//将Nport的编号、IP、端口对应插入ManageOneDev列表
		}
		
	}	
	//启动解析线程
	Start();
}

void	COutDeviceManage::Dispatch(unsigned int id, COMMAND* pcommand)
{
//										lock a(m_readwrite_mutex);	
	std::map<int, ManageOneDev*>::iterator itDev;	
	itDev = m_outdevlist.find(id);
	if (itDev != m_outdevlist.end())
	{
		//itDev->second->PushCommand(pcommand);
		
#if 1
	FILE* fp = fopen("c:\\Dispatch.txt", "ab+");
	if (fp)
	{
		char cprint[1024]="0";
		for(int i=0; i<16; i++)
		{
			char cdata[20]="0";
			sprintf(cdata, "%02X ", pcommand->command[i]);
			fwrite(cdata, strlen(cdata), 1, fp);	
		}
		fwrite("\r\n", 2, 1, fp);	
		fclose(fp);
	}
#endif
		itDev->second->Parse(*pcommand);
	}	
}

void    COutDeviceManage::Stop()
{
	m_bExit = false;
}
																								
void    COutDeviceManage::Start()								
{
	boost::thread   thrd1(boost::bind(&COutDeviceManage::Run, this));
}

void    COutDeviceManage::Run()
{	
	std::map<int, ManageOneDev*>::iterator itdev;
	while(!m_bExit)
	{
		//Wait(1);
		Sleep(1);
//								lock a(m_readwrite_mutex);
		for (itdev=m_outdevlist.begin(); itdev!=m_outdevlist.end(); itdev++)
		{
			//itdev->second->Parse();
			if (itdev->second->m_curstat == spoll)
				itdev->second->FnPoll();
		}
	}
}
//************************************************************************************
//ManageOneDev:通信类 Parse
//
//
//*************************************************************************************
/*
void    ManageOneDev::Parse()
{
	
	//lock a(m_mutex);
	int nNum = -1;	

	std::list<COMMAND>::iterator itcommand;	
	for (itcommand=m_commandlist.begin(); itcommand!=m_commandlist.end(); itcommand++)
	{	
		COMMAND  tcmd = *itcommand;	
		switch(tcmd.type)
		{			
		case -1:				//错误命令
			break;
		case YKCMD_UP:			//上
			if (selected_fn <= m_curstat)
			{				
				//发送向上命令
				SendControlCommand(OP_UP_START);				
				m_curstat = sup;
				WriteRunLog("上");
			}			
			break;
		case YKCMD_UPDOWN_STOP:		//上下停止			
			if (m_curstat == sup)
			{				
				if (!SendControlCommand(OP_UP_STOP))
				{
					break;
				}
				m_curstat = supstop;
				WriteRunLog("上停止");
			}
			else if (m_curstat == sdown)
			{
				if (!SendControlCommand(OP_DOWN_STOP))
				{
					break;
				}
				m_curstat = sdownstop;
				WriteRunLog("下停止");
			}
			break;
		case YKCMD_DOWN:			//下
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_DOWN_START);
				m_curstat = sdown;
				WriteRunLog("下");
			}
			break;
		
		case YKCMD_LEFT:			//左
			if (selected_fn <= m_curstat)
			{				
				SendControlCommand(OP_LEFT_START);
				m_curstat = sleft;
				WriteRunLog("左");
			}
			break;
		case YKCMD_LEFTRIGHT_STOP:		//左右停止		
			if (m_curstat == sleft)
			{
				if (!SendControlCommand(OP_LEFT_STOP))
				{
					break;
				}
				WriteRunLog("左停止");
				m_curstat = sleftstop;
			}
			else if (m_curstat == sright)
			{
				SendControlCommand(OP_RIGHT_STOP);
				WriteRunLog("右停止");
				m_curstat = srightstop;
			}
			break;
		case YKCMD_RIGHT:		//右
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_RIGHT_START);
				m_curstat = sright;
				WriteRunLog("右");
			} 
			break;	
		case YKCMD_NEAR:			//推近
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_FOCUSNEAR_START);
				m_curstat = snear;
				WriteRunLog("推近");
			} 
			break;
		case YKCMD_JJ_STOP:		//推近拉远停止
			if (m_curstat == snear)
			{
				SendControlCommand(OP_FOCUSNEAR_STOP);
				m_curstat = snearstop;
				WriteRunLog("推近停止");
			}
			else if (m_curstat == sfar)
			{
				SendControlCommand(OP_FOCUSFAR_STOP);
				m_curstat = sfarstop;
				WriteRunLog("拉远停止");
			}
			break;
		case YKCMD_FAR:			//拉远
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_FOCUSFAR_START);
				m_curstat = sfar;
				WriteRunLog("拉远");
			}
			break;				
		case YKCMD_SELFN:			//选择fn		
			if (selected_ds <= m_curstat)
			{
				//设置fnid
				m_temfnid = m_temid;
				if (m_temdsid>0 && m_temfnid>0)			
				{
					GetRealDsFnId(m_temdsid, m_temfnid, &m_curDsId, &m_curFnId);
					if (m_curDsId >0 && m_curFnId>0)
					{						
						m_curstat = selected_fn;
						OpenOneFn();
						WriteCurStateToIni(m_curDsId,m_curFnId);
						//WriteRunLog("选择fn");
					}
					break;
				}
				//发送打开图像命令
				break;
			}
			break;
		case YKCMD_AUTOOPEN:
				m_curstat = spoll;
			break;
		case YKCMD_AUTOCLOSE:				//轮训结束		
			m_curstat = spollstop;
			break;					

		case YKCMD_SELDSONE:				//选择ds
		case YKCMD_SELDSTOW:			
			//设置dsid
			m_curDsId = 0;
			m_temdsid = m_temid;
			m_curstat = selected_ds;					
			break;
		case YKCMD_NUM:				//数字键
			m_temid = tcmd.command[10]; 			
			break;
		case YKCMD_CLEAR://清除状态,
			m_temdsid = 0;
			m_temfnid = 0;
			m_curstat = init; 
			break;		
		default:
		break;
			
		}
		m_commandlist.erase(itcommand++);
		break;			
	}
	if (m_curstat == spoll)
	{			
		FnPoll();
	}

}
*/

void    ManageOneDev::Parse(COMMAND tcmd)
{
	
	//lock a(m_mutex);
	//int nNum = -1;	

	//std::list<COMMAND>::iterator itcommand;	
	//for (itcommand=m_commandlist.begin(); itcommand!=m_commandlist.end(); itcommand++)
	{	
		//COMMAND  tcmd = *itcommand;	
		switch(tcmd.type)
		{			
		case -1:				//错误命令
			break;
		case YKCMD_UP:			//上
			if (selected_fn <= m_curstat)
			{				
				//发送向上命令
				SendControlCommand(OP_UP_START);				
				m_curstat = sup;
				WriteRunLog("上");
			}			
			break;
		case YKCMD_UPDOWN_STOP:		//上下停止			
			if (m_curstat >=selected_fn)
			{				
				if (!SendControlCommand(OP_UP_STOP))
				{
					break;
				}
				m_curstat = supstop;
				WriteRunLog("上停止");
			}
//			else if (m_curstat == sdown)
//			{
//				if (!SendControlCommand(OP_DOWN_STOP))
//				{
//					break;
//				}
//				m_curstat = sdownstop;
//				WriteRunLog("下停止");
//			}
			break;
		case YKCMD_DOWN:			//下
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_DOWN_START);
				m_curstat = sdown;
				WriteRunLog("下");
			}
			break;
		
		case YKCMD_LEFT:			//左
			if (selected_fn <= m_curstat)
			{				
				SendControlCommand(OP_LEFT_START);
				m_curstat = sleft;
				WriteRunLog("左");
			}
			break;
		case YKCMD_LEFTRIGHT_STOP:		//左右停止		
			if (m_curstat >=selected_fn)
			{				
				if (!SendControlCommand(OP_LEFT_STOP))
				{
					break;
				}
				WriteRunLog("左停止");
				m_curstat = sleftstop;		
				
			}
			break;
		case YKCMD_RIGHT:		//右
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_RIGHT_START);
				m_curstat = sright;
				WriteRunLog("右");
			} 
			break;	
		case YKCMD_NEAR:			//推近
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_FOCUSNEAR_START);
				m_curstat = snear;
				WriteRunLog("推近");
			} 
			break;
		case YKCMD_JJ_STOP:		//推近拉远停止
			if (m_curstat >=selected_fn)
			{
				SendControlCommand(OP_FOCUSNEAR_STOP);
				m_curstat = snearstop;
				WriteRunLog("推近停止");
			}			
			break;
		case YKCMD_FAR:			//拉远
			if (selected_fn <= m_curstat)
			{
				SendControlCommand(OP_FOCUSFAR_START);
				m_curstat = sfar;
				WriteRunLog("拉远");
			}
			break;				
		case YKCMD_SELFN:			//选择fn		
			if (selected_ds <= m_curstat)
			{
				//设置fnid
				m_temfnid = m_temid;
				if (m_temdsid>0 && m_temfnid>0)			
				{
					GetRealDsFnId(m_temdsid, m_temfnid, &m_curDsId, &m_curFnId);
					if (m_curDsId >0 && m_curFnId>0)
					{						
						m_curstat = selected_fn;
						OpenOneFn();
						WriteCurStateToIni(m_curDsId,m_curFnId);
						//WriteRunLog("选择fn");
					}
					break;
				}
				//发送打开图像命令
				break;
			}
			break;
		case YKCMD_AUTOOPEN:
				m_curstat = spoll;
			break;
		case YKCMD_AUTOCLOSE:				//轮训结束		
			m_curstat = spollstop;
			break;					

		case YKCMD_SELDSONE:				//选择ds
		case YKCMD_SELDSTOW:			
			//设置dsid
			m_curDsId = 0;
			m_temdsid = m_temid;
			m_curstat = selected_ds;					
			break;
		case YKCMD_NUM:				//数字键
			m_temid = tcmd.command[10]; 			
			break;
		case YKCMD_CLEAR://清除状态,
			m_temdsid = 0;
			m_temfnid = 0;
			m_curstat = init; 
			break;		
		default:
		break;
			
		}
		//m_commandlist.erase(itcommand++);
		//break;			
	}
	//if (m_curstat == spoll)
	//{			
	//	FnPoll();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -