亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbsvr.cpp

?? wince下對sqlserver數據庫的操作,增刪改操作,單進程單線程
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// dbsvr.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include "dbsvr.h"
#include "dbdef.h"
#include "ccdb.h"
#include "BusDef.h"
#include "cc_data_struct.h"

#define DEV_ADDR_POS	8+CC_DEVIE_NAME_LEN+CC_DEVICE_NUM_LEN//將系統地址和節點地址作為一個int類型來處理


#include "database.h"

#define MSG_DBACTION		4001
BOOL InitWinsock();
CWinThread *pThreadDb;
CWinThread *pThreadSocket;
UINT DbServerThread( LPVOID pParam );
UINT DbSocketServerThread( LPVOID pParam );
bool WaitForDataRecv(SOCKET skClient, int nSec);
bool IsSocketClose(SOCKET skClient);
bool bSockeRun;
extern void InitDb();
extern void Init();
extern  int ModifyData(ReqParamStruct *pstrReqParam,RetResultStruct **pOut,BOOL bSyn);
extern void FreeResult(RetResultStruct **pOut);
extern void writebuginfo(const char* lpszFormat, ...);
extern CDataBase g_DataBase;

CRITICAL_SECTION	g_DbCritialSection;

CMap<int,int,unsigned short,unsigned short> g_DevValueMap;//(設備地址+系統地址)、狀態值
//CMap<int,int,unsigned short,unsigned short> g_DevOperSourceMap;//設備ID、

void CALLBACK TimerFunDay(  HWND hwnd,   UINT uMsg,   UINT idEvent,   DWORD dwTime ); 
void CALLBACK TimerFunBackUp(  HWND hwnd,   UINT uMsg,   UINT idEvent,   DWORD dwTime );
int DbRecove();

UINT g_TimerFunDayID=0;


int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
 	// TODO: Place code here.
	// Main message loop:
	struct sockaddr_in local;
//	struct sockaddr_in from;
//	int fromlen =sizeof(from);
	int	 nret;
	char buffer[1024]="\0";
    HRESULT			   	hr				= NOERROR;	// Error code reporting
	SOCKET socket1;
	ReqParamStruct reqparam;
	RetResultStruct *pCur,*pRetResultStruct=NULL;
	CTime tm; int t;
	HANDLE hMutex=CreateMutex(NULL,FALSE,L"DBSERVER");
	if(hMutex ==NULL)
	{
		MessageBox(NULL,L"dbsvr",L"Create  mutex Error!",MB_OK);
		return -1;
	}
	if(GetLastError() ==ERROR_ALREADY_EXISTS)
	{
		CloseHandle(hMutex);
		MessageBox(NULL,L"dbsvr",L"Already exist!",MB_OK);
		return -1;
	}
	Init();
	hr=CoInitializeEx(NULL, COINIT_MULTITHREADED);

	if(FAILED(hr))
	{
		MessageBox(NULL,L"數據庫接口初始化錯誤!",L"數據庫錯誤",MB_OK);
		goto ErrRet;
	}

//	writebuginfo(L"Enter DbSvr+++++++++\r\n");
	if(!InitWinsock())
	{
		CloseHandle(hMutex);
		MessageBox(NULL,L"Socket Error!",L"dbsvr",MB_OK);
		return -1;
	}

	local.sin_family=AF_INET;
	local.sin_port=htons(COMM_PORT);             ///監聽端口
//	local.sin_addr.s_addr= inet_addr("127.0.0.1");       ///本機
	local.sin_addr.s_addr=htonl(INADDR_ANY);
//	socket1=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);

	if((socket1	= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)
	{
		 MessageBox(NULL,L"Creat",L"Create Error!",MB_OK);
		goto ErrRet;
	}
	if(bind(socket1, (struct sockaddr *)&local, sizeof(struct sockaddr_in)) == SOCKET_ERROR){
		//Throw Error
		 MessageBox(NULL,L"Bind",L"Bind Error!",MB_OK);
		goto ErrRet;
	}
	if(listen(socket1, 10) == SOCKET_ERROR){
		//Throw Error
		 MessageBox(NULL,L"Listen",L"Listen Error!",MB_OK);
		goto ErrRet;
	}
	//初始化設備狀態列表
	reqparam.nBusID =BUSINESS_DEV;
	reqparam.nMethod =ACTION_QUERYALL;
	reqparam.nSize=0;
	reqparam.pBuf=NULL;
	nret=ModifyData(&reqparam,&pRetResultStruct,FALSE);
	pCur=pRetResultStruct;
	while(pCur)
	{
		g_DevValueMap.SetAt(*((int*)((char *)pCur->pBuf +DEV_ADDR_POS)),0);
		pCur=pCur->pNext;
	}
	FreeResult(&pRetResultStruct);


	::InitializeCriticalSection(&g_DbCritialSection);
	//啟動定時器,凌晨開始處理
#ifdef _USEBYLHL
	g_TimerFunDayID=SetTimer(NULL,101,3*60000,TimerFunDay);
	SetTimer(NULL,101,3*60000,TimerFunBackUp);//頻率為3分鐘
#else

	tm=CTime::GetCurrentTime();
	t=24*60 -tm.GetHour()*60 -tm.GetMinute();
	g_TimerFunDayID=SetTimer(NULL,101,t*60000,TimerFunDay);
	SetTimer(NULL,102,60*60000,TimerFunBackUp);//頻率為1小時
#endif
	//啟動TCP服務線程
	pThreadDb =AfxBeginThread(DbServerThread,NULL);
	bSockeRun=TRUE;
	pThreadSocket =AfxBeginThread(DbSocketServerThread,LPVOID(&socket1));
#ifdef _USEBYLHL
	 MessageBox(NULL,L"running!",L"DbSvr",MB_OK);
#else
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0)) 
	{
	};
#endif
/*	while (1)
	{
		SOCKET skClient	= accept(socket1,NULL, NULL);
		 if(skClient ==INVALID_SOCKET )
		 {
		 MessageBox(NULL,L"Accept!",L"post thread message!",MB_OK);
			 break;
		 }
		 SOCKET *pSocket=new SOCKET;
		 *pSocket=skClient;
	//	 MessageBox(NULL,L"Accept Ok!",L"post thread message!",MB_OK);
		 PostThreadMessage(pThreadDb->m_nThreadID,MSG_DBACTION,((WPARAM )pSocket),0);
	//	Sleep(500);
	}
*/
	 bSockeRun=FALSE;
	::PostThreadMessage(pThreadDb->m_nThreadID,WM_QUIT,0,0);
ErrRet:
	closesocket(socket1);
	WSACleanup();
	CoUninitialize();
	CloseHandle(hMutex);
//	writebuginfo(L"Exit DbSvr+++++++++\r\n");
	return 0;
}


BOOL InitWinsock()
{
	int Error;
	WORD VersionRequested;
	WSADATA WsaData;
	VersionRequested=MAKEWORD(2,2);
	Error=WSAStartup(VersionRequested,&WsaData); //啟動WinSock2
	if(Error!=0)
	{
//		WCHAR cwTemp[30];
	//	swprintf(cwTemp,L"Socket Startup err=%d \r\n",Error); 
//		writebuginfo(cwTemp);
		writebuginfo("file:%s,line:%d\r\n",__FILE__,__LINE__);
		return FALSE;
	}
	else
	{
	//	if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
		{
	//	WCHAR cwTemp[30];
	//	swprintf(cwTemp,L"Socket Ver =%d.%d \r\n",LOBYTE(WsaData.wVersion),HIBYTE(WsaData.wHighVersion)); 
//		writebuginfo(cwTemp);
	//		WSACleanup();
		//	return FALSE;
		}
		
	}
	return TRUE;
}
UINT DbServerThread( LPVOID pParam )
{
	MSG msg;
	BOOL bSyn;
	int nrecv,nret,nsend;
	char buf[MAX_PACKET_LENGTH]="";
	char sendbuf[1024]="";
	int npacket=0;WCHAR cwTemp[100];
	RetResultStruct *pCur,*pNext,*pRetResultStruct=NULL;
	ReqParamStruct ReqParam,*pReqParamStruct;
	while (GetMessage(&msg, NULL, 0, 0)) 
	{//調用數據庫執行函數
		switch(msg.message)
		{
		case MSG_DBACTION:
			{//處理數據庫操作請求
				//1.接收數據
				if(!WaitForDataRecv(*(SOCKET*)msg.wParam,SECONT_TO_WAIT))
				{
					writebuginfo("DbSvr recv data err \n");
					goto DBACTION_ERR;
				}
				memset(buf,0,MAX_PACKET_LENGTH);
				nrecv =recv(*(SOCKET*)msg.wParam,buf,MAX_PACKET_LENGTH,0);
				if(nrecv == SOCKET_ERROR)
				{
					writebuginfo("DbSvr socket recv err \n");
					goto DBACTION_ERR;
				}
				if(IsSocketClose(*(SOCKET*)msg.wParam))
				{//數據接收完畢,檢查客戶端是否關閉
					closesocket(*(SOCKET*)msg.wParam);
					delete (SOCKET*)msg.wParam;
					writebuginfo("Client socket close\n");
					return 0;
				}
				//2.檢查接收的數據
				if(nrecv < sizeof(ReqParamStruct)+sizeof(int) || *(int*)buf != PMDB_UDPHEADID)
				{
					writebuginfo("DbSvr err len=%d Or %d!=%d\n",nrecv,*(int*)buf,PMDB_UDPHEADID);
					goto DBACTION_ERR;
				}
				pReqParamStruct=(ReqParamStruct *)(buf + sizeof(int));
				if(pReqParamStruct->nSize != nrecv -sizeof(ReqParamStruct)-sizeof(int))
				{
					writebuginfo("file:%s,line:%d,param size err \n",__FILE__,__LINE__);
					goto DBACTION_ERR;
				}
				memcpy(&ReqParam,buf+sizeof(int),sizeof(ReqParamStruct));
				if(ReqParam.pBuf !=0)
					bSyn=TRUE;
				else bSyn=FALSE;
				if(ReqParam.nSize== 0)
				{
					ReqParam.pBuf =NULL;
				}else
				{
					ReqParam.pBuf =buf+sizeof(ReqParamStruct)+ sizeof(int);
				}
			//	pReqParamStruct->pBuf = buf+sizeof(ReqParamStruct);
				//3.數據庫操作
				pNext=pRetResultStruct=NULL;
		::EnterCriticalSection(&g_DbCritialSection);
				if(IsSocketClose(*(SOCKET*)msg.wParam))
				{//有可能等待時間過長,TCP已經關閉
					closesocket(*(SOCKET*)msg.wParam);
					delete (SOCKET*)msg.wParam;
					::LeaveCriticalSection(&g_DbCritialSection);
					writebuginfo("file:%s,line:%d,timeout \n",__FILE__,__LINE__);
					return 0;
				}


				 nret=ModifyData(&ReqParam,&pRetResultStruct,bSyn);
		::LeaveCriticalSection(&g_DbCritialSection);
				 if(ERR_PROG_NOTOPEN==nret)
				 {//執行恢復操作
//					writebuginfo(L"begin reback ok");
					writebuginfo("file:%s,line:%d****begin reback \n",__FILE__,__LINE__);
					 if(DbRecove() ==0)
					 {
		///			writebuginfo(L"reback ok");
					writebuginfo("file:%s,line:%d****reback ok\n",__FILE__,__LINE__);
						::EnterCriticalSection(&g_DbCritialSection);
						 nret=ModifyData(&ReqParam,&pRetResultStruct,bSyn);
						::LeaveCriticalSection(&g_DbCritialSection);
					 }else
					 {
						writebuginfo("file:%s,line:%d****reback failure,pResult=%d\n",__FILE__,__LINE__,pRetResultStruct);
					 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品国产三级国产a久久| 色香蕉久久蜜桃| av成人免费在线| 日韩亚洲欧美中文三级| 日韩一区在线看| 国产成人免费高清| 日韩一卡二卡三卡国产欧美| 亚洲精品中文在线| 东方欧美亚洲色图在线| 日韩精品一区在线| 日韩电影在线一区二区三区| 99视频在线观看一区三区| 日韩欧美国产系列| 亚洲v中文字幕| 欧美色电影在线| 亚洲婷婷在线视频| 99免费精品视频| 国产精品久久久久影视| 国产精品资源在线观看| 精品久久久久99| 伦理电影国产精品| 欧美一区二区三区白人| 亚洲不卡av一区二区三区| 欧美在线制服丝袜| 亚洲国产精品嫩草影院| 欧美三级午夜理伦三级中视频| 亚洲天堂a在线| 色综合久久中文综合久久97| 国产精品二三区| 91玉足脚交白嫩脚丫在线播放| 欧美国产激情二区三区| 国产.欧美.日韩| 中文字幕一区av| 色婷婷久久久亚洲一区二区三区 | 一区二区三区**美女毛片| 99精品偷自拍| 一级中文字幕一区二区| 欧美中文字幕亚洲一区二区va在线| 亚洲一区二区在线免费观看视频| 在线日韩国产精品| 日韩电影网1区2区| 337p粉嫩大胆色噜噜噜噜亚洲| 麻豆精品在线看| 欧美精品一区二区三区在线| 国产精品羞羞答答xxdd| 亚洲男人的天堂在线aⅴ视频 | 亚洲国产成人91porn| 欧美日本在线看| 精品一区二区三区蜜桃| 中文字幕免费在线观看视频一区| 色视频一区二区| 午夜精品影院在线观看| 久久综合九色综合欧美98| 成人aaaa免费全部观看| 一区二区三区中文字幕精品精品 | 久久aⅴ国产欧美74aaa| 欧美国产日韩亚洲一区| 欧美在线影院一区二区| 国产在线国偷精品产拍免费yy| 国产精品看片你懂得| 欧美日韩一级二级| 国产成人综合网站| 亚洲综合精品自拍| 欧美电影免费提供在线观看| 成人手机在线视频| 三级一区在线视频先锋| 久久精品人人爽人人爽| 欧美午夜精品理论片a级按摩| 麻豆一区二区99久久久久| 国产精品国产精品国产专区不蜜 | 日本成人在线不卡视频| 国产拍揄自揄精品视频麻豆| 在线免费观看不卡av| 韩国在线一区二区| 亚洲国产婷婷综合在线精品| 久久久国产午夜精品| 欧美日韩高清一区二区不卡| 国产成人午夜精品影院观看视频| 亚洲午夜电影在线观看| 国产精品天干天干在线综合| 日韩一区二区三区四区| 欧洲一区在线电影| 成人丝袜18视频在线观看| 老司机精品视频在线| 亚洲成av人片一区二区梦乃| 中文字幕一区二区三区在线播放| 日韩精品一区二区在线| 精品视频色一区| 99久久国产综合色|国产精品| 免费不卡在线视频| 亚洲午夜在线视频| 亚洲精品成人天堂一二三| 国产亚洲欧美色| 日韩视频一区二区在线观看| 欧美精品乱码久久久久久| 91亚洲男人天堂| 不卡av免费在线观看| 美洲天堂一区二卡三卡四卡视频| 亚洲国产中文字幕| 亚洲一区二区三区四区五区中文| 国产精品久久久久桃色tv| 精品国产成人系列| 欧美tk丨vk视频| 欧美一区二区三区系列电影| 欧美精品v日韩精品v韩国精品v| 91福利在线免费观看| 91片黄在线观看| 色综合激情久久| 91在线免费播放| 色婷婷香蕉在线一区二区| 99久久综合精品| 91麻豆免费看| 在线免费观看日本一区| 欧美伊人久久久久久久久影院| 色哟哟一区二区三区| 一本到不卡精品视频在线观看| 色噜噜狠狠成人中文综合| 欧美主播一区二区三区| 欧美系列日韩一区| 欧美精品在线观看一区二区| 欧美一区二区三区四区久久| 日韩精品中午字幕| 久久综合色天天久久综合图片| 久久人人97超碰com| 国产精品色眯眯| 一区二区三区色| 亚洲成人激情社区| 麻豆精品一区二区| 国产福利精品导航| 色综合久久88色综合天天| 欧美日韩一区 二区 三区 久久精品| 欧美色倩网站大全免费| 日韩欧美www| 国产日韩精品一区二区三区| 国产精品久久网站| 亚洲观看高清完整版在线观看| 热久久国产精品| 国产99精品国产| 欧美性大战久久久久久久蜜臀 | 欧美日韩久久一区| 日韩欧美在线1卡| 国产欧美精品一区aⅴ影院| 亚洲人成精品久久久久久| 亚洲成人福利片| 国产成a人亚洲精品| 欧美日韩一级二级三级| ww久久中文字幕| 一区二区视频免费在线观看| 久久99精品久久久久婷婷| 91伊人久久大香线蕉| 日韩欧美一区在线| 亚洲三级电影网站| 秋霞午夜av一区二区三区| 成人97人人超碰人人99| 91麻豆精品国产91久久久资源速度| 国产日韩精品一区| 午夜久久电影网| 91偷拍与自偷拍精品| 久久网站热最新地址| 一区二区三区日韩在线观看| 国产成人综合网| 制服丝袜成人动漫| 亚洲日韩欧美一区二区在线| 韩国女主播一区二区三区| 欧美三级韩国三级日本一级| 国产精品久久久久久久久快鸭| 日韩—二三区免费观看av| 色播五月激情综合网| 久久久久成人黄色影片| 免费的成人av| 欧美男男青年gay1069videost| 国产精品乱码一区二三区小蝌蚪| 免费观看成人鲁鲁鲁鲁鲁视频| 在线观看91视频| 亚洲图片你懂的| 成人精品免费视频| 久久色中文字幕| 日韩国产欧美视频| 欧美丝袜丝交足nylons图片| 中文字幕一区二区三区精华液| 国产成人免费在线观看不卡| 欧美一区二区久久久| 亚洲国产精品一区二区久久恐怖片| 99国产精品久久| 国产精品女同互慰在线看| 国产精品一区免费视频| 欧美大片在线观看一区二区| 日韩av高清在线观看| 欧美日韩国产精选| 亚洲成人精品影院| 欧美日韩一卡二卡| 亚洲尤物视频在线| 欧美亚洲国产bt| 午夜精品久久久久久| 欧美日韩免费不卡视频一区二区三区| 一区二区三区在线影院| 一本到不卡精品视频在线观看| 亚洲日本电影在线| 色屁屁一区二区| 亚洲国产精品影院|