www.pudn.com > IPServer.rar > DrawList.cpp


#include "stdafx.h" 
#include "DrawList.h" 
#include "ConfigDlg.h" 
#include  
using namespace std; 
 
#define NO_SUCH_DEVICE	0 
#define DIFFERENT_IP	1 
#define SAME_NAME_IP	2 
#define DELETE_DEVICE	3 
void GetCurrentPath(char *path); 
void OutputLocalTime(char *tmval) 
{ 
 
	char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; 
	time_t timep; 
	struct tm *p; 
	time(&timep); 
	p=localtime(&timep); /*取得当地时间*/ 
	sprintf(tmval,"%d %d %d %s %d:%d:%d",(1900+p->tm_year),( 1+p->tm_mon), p->tm_mday,\ 
		wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec); 
} 
 
CDrawList::CDrawList() 
{ 
} 
CDrawList::~CDrawList() 
{ 
 
} 
 
void CDrawList::updateCommandToList(bool badd,const char* deviceip,const char* devicename,const char* deviceid, 
									   const char* netcardid, unsigned short port,CListCtrl* list, BOOL bLog) 
{ 
	int count=list->GetItemCount(); 
	if(count>=1000) 
		list->DeleteAllItems(); 
 
	TRACE("updateCommandToList::num on lists=%d\n",count); 
	char strport[32]; 
	memset(strport,0,32); 
	_itoa(port,strport,10); 
 
	FILE *fp; 
	char item[512]; 
	char tmval[100]; 
	string strItem; 
	int pos; 
	string strRemain; 
	int bHaved=NO_SUCH_DEVICE; 
	 
	int result=1; 
	if(badd) 
	{ 
		for(int i = 0; i< count; i++) 
		{ 
			if(strcmp(devicename,(LPCTSTR)(list->GetItemText(i, 1))) == 0) 
			{	 
				TRACE("the %d device %s existed\n",i,devicename); 
				if(strcmp(deviceip,(LPCTSTR)list->GetItemText(i, 0)) == 0) 
				{ 
					bHaved=SAME_NAME_IP; 
					break; 
				} 
		//设备已经存在则刷新 
				list->DeleteItem(i); 
				if (bHaved==NO_SUCH_DEVICE) 
				{ 
					TRACE("%d refresh",i); 
					list->InsertItem(i,deviceip); 
					list->SetItemText(i,1,devicename); 
					list->SetItemText(i,2,deviceid); 
					list->SetItemText(i,3,netcardid); 
					list->SetItemText(i,4,strport); 
					bHaved=DIFFERENT_IP; 
				} 
				result=0; 
			} 
			else 
			{ 
				result=1; 
			} 
		} 
 
		if(result==1&&bHaved==NO_SUCH_DEVICE) 
		{ 
 
			TRACE("ADD new a item:deviceip=%s,devicename=%s,deviceid=%s\n",deviceip,devicename,deviceid); 
			//OutputLocalTime(tmval); 
			//sprintf(item,"%s\t%s\t%s\t%s\t%s\t%s\n",tmval,deviceip,devicename, deviceid,\ 
			//	netcardid,strport); 
			//fputs(item, fp); 
			list->InsertItem(0,deviceip); 
			list->SetItemText(0,1,devicename); 
			list->SetItemText(0,2,deviceid); 
			list->SetItemText(0,3,netcardid); 
			list->SetItemText(0,4,strport);	 
		} 
	} 
	else 
	{ 
		TRACE("delete a item from list\n"); 
		for(int i = 0; i< count; i++) 
		{ 
 
			if(strcmp(deviceid,(LPCTSTR)list->GetItemText(i, 2)) == 0) 
			{ 
				list->DeleteItem(i); 
				bHaved=DELETE_DEVICE; 
				break; 
			} 
		} 
	} 
 
	//更新列表 
	list->UpdateWindow(); 
	count=list->GetItemCount(); 
	if ( bHaved != SAME_NAME_IP ) 
	{ 
		char path[100]; 
		GetCurrentPath(path); 
		strcat(path,"\\devicelog.txt"); 
		TRACE("PATH=%s\n",path); 
		if ( (fp=fopen(path, "w+")) == NULL) 
		{ 
			TRACE("OPEN devicelog.txt error\n"); 
			return; 
		} 
		TRACE("change devicelog\n"); 
		for(int j = 0; j< count; j++) 
		{ 
			OutputLocalTime(tmval); 
			sprintf(item,"%s\t%s\t%s\t%s\t%s\t%s\n",tmval, list->GetItemText(j,0).GetBuffer(0),\ 
				list->GetItemText(j,1).GetBuffer(0), list->GetItemText(j, 2).GetBuffer(0),\ 
				list->GetItemText(j,3).GetBuffer(0), list->GetItemText(j,4).GetBuffer(0)); 
			fputs(item, fp);			 
		} 
		fclose(fp); 
	}  
	 
}