亚洲欧美第一页_禁久久精品乱码_粉嫩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ⅴ综合色| 国产精品久久久久一区二区三区共| 国产精品资源在线| 国产色一区二区| 97se亚洲国产综合自在线不卡| 亚洲午夜电影在线| 日韩三级精品电影久久久| 国产综合一区二区| 亚洲免费观看视频| 国产视频一区不卡| 在线播放中文一区| 福利一区福利二区| 久久99国内精品| 国产精品你懂的在线| 欧美一区欧美二区| 欧美在线观看一二区| 福利一区二区在线观看| 韩国午夜理伦三级不卡影院| 亚洲一区二区美女| 亚洲国产成人在线| 精品人在线二区三区| 欧美二区三区的天堂| 欧美艳星brazzers| 欧美日韩日日摸| 欧美久久久久久蜜桃| 91农村精品一区二区在线| 风间由美一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美aⅴ...| 亚洲欧美日韩精品久久久久| 中文幕一区二区三区久久蜜桃| 国产精品久久777777| 国产日韩精品久久久| 久久亚洲欧美国产精品乐播| 国产精品免费久久久久| 日韩一区有码在线| 亚洲午夜电影网| 青草av.久久免费一区| 日韩激情在线观看| 国产高清无密码一区二区三区| 国产ts人妖一区二区| 精品一区二区三区在线视频| 国产一区在线精品| 色婷婷av一区二区三区gif| 精品视频123区在线观看| 日韩午夜激情视频| 国产精品福利在线播放| 日韩电影在线观看电影| 高清不卡一二三区| 日韩精品中午字幕| 亚洲一区免费在线观看| 精品一区在线看| 日本韩国欧美一区二区三区| 欧美一区二区三区的| 中文字幕综合网| 国产伦精品一区二区三区免费 | 亚洲一区二区三区中文字幕在线| 丝袜亚洲另类欧美| 成人av集中营| 久久综合九色综合欧美98 | 亚洲国产视频一区二区| 国产精品一线二线三线| 欧美电影精品一区二区| 亚洲免费成人av| 国产成人亚洲精品青草天美| 日韩三级电影网址| 国模一区二区三区白浆| 精品久久久久久久久久久院品网 | 成人一级片网址| 精品99一区二区| 免费欧美日韩国产三级电影| 91久久奴性调教| 亚洲chinese男男1069| 欧美日韩视频在线第一区| 亚洲一区二区三区视频在线播放 | 视频一区二区三区中文字幕| 在线免费观看一区| 亚洲综合一区二区| 色爱区综合激月婷婷| 亚洲一区av在线| www国产精品av| 91视频免费播放| 丝袜美腿亚洲一区| 国产亚洲成年网址在线观看| 国产一区欧美日韩| 一区二区成人在线视频| 777午夜精品免费视频| 国产成a人无v码亚洲福利| 一区二区三区不卡在线观看 | 日本高清免费不卡视频| 久久99热这里只有精品| 亚洲三级免费观看| www国产精品av| 欧美一级电影网站| 99久久99久久精品免费观看| 看片的网站亚洲| 亚洲电影在线免费观看| 国产清纯白嫩初高生在线观看91| 欧美主播一区二区三区美女| 国产一区二区三区四| 午夜日韩在线电影| 亚洲久草在线视频| 国产亚洲综合色| 欧美精品一区二区三区一线天视频| 欧美性色综合网| av福利精品导航| 盗摄精品av一区二区三区| 亚洲五码中文字幕| 亚洲第一福利视频在线| 亚洲成av人片在线| 午夜亚洲福利老司机| 一区二区三区精密机械公司| 亚洲欧美偷拍另类a∨色屁股| 中文字幕一区二区视频| 国产精品久久久久aaaa| 国产精品久久久久毛片软件| 国产精品久久久久影视| 国产精品不卡视频| 亚洲成人av资源| 免费看黄色91| 精品一区二区国语对白| 大陆成人av片| 欧美日韩不卡视频| 精品国精品国产尤物美女| 日韩欧美国产一区二区在线播放| 欧美一区二区三区视频在线观看| 久久精品综合网| 亚洲午夜激情网页| 高清av一区二区| 制服丝袜亚洲网站| 欧美激情中文不卡| 精品中文av资源站在线观看| 成人av中文字幕| 欧美日韩国产经典色站一区二区三区 | 国产激情精品久久久第一区二区| 国产91丝袜在线18| 欧美一级片免费看| 亚洲免费视频中文字幕| www.色综合.com| 欧美日韩精品免费| 亚洲日本一区二区| 国内精品免费在线观看| 日韩欧美国产wwwww| 亚洲综合无码一区二区| 91看片淫黄大片一级| 亚洲欧美另类图片小说| 91视频免费看| 日韩理论片在线| 色婷婷亚洲一区二区三区| 亚洲欧美另类综合偷拍| 本田岬高潮一区二区三区| www成人在线观看| 丁香五精品蜜臀久久久久99网站| 6080亚洲精品一区二区| 一区二区在线观看视频在线观看| 免费一级欧美片在线观看| 欧美一区二区三区精品| 水野朝阳av一区二区三区| 在线视频欧美区| 秋霞午夜av一区二区三区| 久久免费视频一区| 91在线国内视频| 亚洲小说春色综合另类电影| 欧美三级日韩在线| 五月天中文字幕一区二区| 欧美电影免费观看高清完整版| 国产米奇在线777精品观看| 日本一区二区三区高清不卡| 色狠狠桃花综合| 国产一区二区三区不卡在线观看| 国产日韩亚洲欧美综合| 99久久国产综合精品色伊| 视频一区二区不卡| 午夜欧美大尺度福利影院在线看| 国产午夜精品理论片a级大结局| av不卡免费电影| 国产一二三精品| 日韩av一区二区三区| 久久久不卡网国产精品一区| 在线视频你懂得一区二区三区| 日韩电影在线观看网站| 国产精品福利一区二区三区| 欧美精品1区2区3区| 成人免费福利片| 免费成人av在线播放| 亚洲综合视频网| 国产精品私人影院| 精品成人在线观看| 欧美喷水一区二区| 日本精品一区二区三区高清| 老司机精品视频导航| 天天综合色天天综合色h| 一区二区三区日韩欧美精品| 欧美国产日本韩| 中文字幕精品在线不卡| 日韩一区二区在线观看视频|