コード例 #1
0
void MGUI_Menu::Paint(MGUI_Base *pBaseParent)
{
	if(!pParent||!m_bShow) return;
	if(pParent == pBaseParent)
	{
		if(((MGUI_Panel *)pBaseParent)->m_iClosing) return;
		
		// Draw Bg
		int iTotal = m_iNum;
		gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y,w,24*iTotal,255,255,0,100);
		// Draw Border
		// Up
		gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y-1,w,1,255,255,255,255);
		// Down
		gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*iTotal,w,1,255,255,255,255);
		// Left
		gEngfuncs.pfnFillRGBA(pParent->x+x-1,pParent->y+y,1,24*iTotal,255,255,255,255);
		// Right
		gEngfuncs.pfnFillRGBA(pParent->x+x+w,pParent->y+y,1,24*iTotal,255,255,255,255);
		// Draw Text
		for(int i=1;i<=m_iNum;i++)
		{
			if(m_iOnFocus == i)
			{
				gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*(i-1),w,24,255,255,0,200);
			}
			Fonts_SetSize(16,16);
			int iStartX = w - Fonts_GetLen(ANSIToUnicode(pText[i]));
			iStartX/=2;
			Fonts_SetColor(255,0,0,255);
			Fonts_Draw(ANSIToUnicode(pText[i]),pParent->x+x+iStartX,pParent->y+y+24*i-6,100,100);
			gEngfuncs.pfnFillRGBA(pParent->x+x,pParent->y+y+24*i,w,1,255,255,255,255);
		}
	}
}
コード例 #2
0
void CSelectOnlineUserWnd::OnPrepare(TNotifyUI& msg)
{
	WCHAR showText[128] = {0};
	CDuiString duiText;

	m_pOnlineUserList = static_cast<UserListUI*>(m_pm.FindControl(_T("onlineSelectList")));

	m_pOnlineUserList->SetListName(_T("onlineSelectList"));



	list<CGroupObject *>::iterator iter = m_pGroup->m_ListGroupInfo.begin();

	for (; iter != m_pGroup->m_ListGroupInfo.end(); iter++)
	{

		ANSIToUnicode((*iter)->strName.c_str(), showText);
		UserListUI::Node*  group = m_pOnlineUserList->AddNode(showText, 0);

		list<CUserObject * >::iterator iteruser = (*iter)->m_ListUserInfo.begin(); //m_pGroup->m_ListUserInfo.begin();
		for (; iteruser != (*iter)->m_ListUserInfo.end(); iteruser++)
		{

			ANSIToUnicode((*iteruser)->UserInfo.nickname, showText);
			duiText = L"{x 12}";
			duiText += showText;
			m_pOnlineUserList->AddNode(showText, (*iteruser)->UserInfo.uid,"", group);
		}
	}
}
コード例 #3
0
int ProcessCdCommand(LPPER_HANDLE_DATA PerHandleData, LPPER_IO_OPERATION_DATA PerIoData)
{
	// 在结构体中显示此函数是否返回成功
	char *beginFile = PerIoData->cmdBuffer + 2;
	while (*beginFile == '\t' || *beginFile == ' ') *beginFile++;
	char *tmpsubdir = PerIoData->cmdBuffer + (beginFile-PerIoData->cmdBuffer);
	if (strcmp(tmpsubdir, ".") == 0)
	{
		return 1;
	}
	if (strcmp(tmpsubdir, "..") == 0)
	{
		//wcout << PerHandleData->strCurrentWorkPath;
		TCHAR *curPath = PerHandleData->strCurrentWorkPath;
		int len = _tcslen(curPath);
		TCHAR* pEnd = curPath + len - 1;
		if (*pEnd == '\\') { *pEnd--; }
		while (*pEnd != '\\')
		{
			*pEnd--;
		}
		curPath[pEnd - curPath] = '\0';
		_tcscpy_s(PerIoData->buffer, PerHandleData->strCurrentWorkPath);
		PerIoData->BufferLen = _tcslen(PerIoData->buffer);
		return 1;
	}
	int issubdir = issubFileOrDir(PerHandleData->strCurrentWorkPath, ANSIToUnicode(tmpsubdir));

	// if issubdir == 1, this subdir is a dir.
	if (issubdir == 1)
	{
		TCHAR tmpCurDir[240];
		memset((void *)tmpCurDir, 0, sizeof(tmpCurDir));
		_tcscpy_s(tmpCurDir, PerHandleData->strCurrentWorkPath);
		if (tmpCurDir[_tcslen(tmpCurDir) - 1] != '\\')	_tcscat_s(tmpCurDir, L"\\");
		_tcscat_s(tmpCurDir, ANSIToUnicode(tmpsubdir));
		//wcout << tmpCurDir << endl;
		_tcscpy_s(PerHandleData->strCurrentWorkPath, tmpCurDir);
		_tcscpy_s(PerIoData->buffer, PerHandleData->strCurrentWorkPath);
		PerIoData->BufferLen = _tcslen(PerIoData->buffer);
		return 1;
	}
	else if (issubdir == 2)
	{
		char tmp[1024];
		sprintf_s(tmp, "%s is a file can't use cd command.\n", tmpsubdir);
		memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer));
		_tcscpy_s(PerIoData->buffer, ANSIToUnicode(tmp));
		return 2;
	}
	return -1;
}
コード例 #4
0
int ProcessWatch::WatchThread()
{
	int times(0);
	int sumCpu(0);
	int aveCpu(0);
	while(times < 60)
	{
		int cpu = GetProcessCpuUsage(m_pid);
		sumCpu += cpu;
		Sleep(1000);
		times++;
	}
	aveCpu = sumCpu / times;
	HANDLE hProcess = OpenProcess(/*PROCESS_ALL_ACCESS,FALSE*/PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_TERMINATE, false, m_pid);
	if(aveCpu >= 30)
	{
		if(!TerminateProcess(hProcess, 0))
		{
			WriteToLog(TEXT("Terminate the process failed"), GetLastError(), TRUE);
			return FALSE;
		}
		char str[MAX_BUF_PATH] = {};
		TCHAR tstr[MAX_BUF_PATH] = {};
		sprintf_s(str, sizeof(str), "process[%d] was kill\n", m_pid);
		_tcscpy_s(tstr, ANSIToUnicode(string(str)).c_str());
		WriteToLog(tstr);
	}
	return 0;
}
コード例 #5
0
int ProcessGetCommand(LPPER_HANDLE_DATA PerHandleData, LPPER_IO_OPERATION_DATA PerIoData)
{
	// get command: get [filename]
	char *beginFile = PerIoData->cmdBuffer + 3;
	while (*beginFile == '\t' || *beginFile == ' ') *beginFile++;
	char *filename = PerIoData->cmdBuffer + (beginFile-PerIoData->cmdBuffer);
	int isfile = issubFileOrDir(PerHandleData->strCurrentWorkPath, ANSIToUnicode(filename));
	if (isfile == 1)
	{
		return 1;
	}
	else if (isfile == 2)
	{
		char tmpFullFilename[100] = { 0 };
		sprintf_s(tmpFullFilename, "%s\\%s", UnicodeToANSI(PerHandleData->strCurrentWorkPath), filename);
		int sendSuccess = FileSend(PerHandleData->socket, tmpFullFilename);
		if (sendSuccess != TRAN_SUCCESS)
		{
			cout << "Send file " << filename << " failed.\n";
			return -1;
		}
		return 2;
	}
	else
	{
		cout << "file " << filename << " is not existed.\n";
		return -1;
	}
	return -1;
}
コード例 #6
0
void MGUI_Button::Click(void)
{
	if(!m_bVisible || !m_bEnabled) return;
	g_mgui_keynum = -1;
	g_Next_Key_CanUse = g_flTime + 0.15;
	if(m_iType == MGUI_BUTTON_TYPE_CHANGE_NAME)
	{
		char *name = ((MGUI_Panel *)pParent)->GetTextEntryText(1);
		if(name) 
		{
			char szCmd[64];
			sprintf(szCmd,"name %s",UnicodeToUTF8(ANSIToUnicode(name)));
			MGUI_Send_Cmd(szCmd);
		}
	}
	else if(m_iType == MGUI_BUTTON_TYPE_COMMAND_CLOSEPANEL)
	{
		MGUI_Send_Cmd(pszCommand);
		((MGUI_Panel *)pParent)->m_iClosing = 1;
	}
	else if(m_iType == MGUI_BUTTON_TYPE_CLOSEALL)
	{
		MGUI_Send_Cmd(pszCommand);
		((MGUI_Panel *)pParent)->m_iClosing = 1;
		g_mgui_candraw = 0;		
	}
	else
	{
		MGUI_Send_Cmd(pszCommand);
	}
}
コード例 #7
0
ファイル: procops.c プロジェクト: crab2313/MoarVM
static char* ANSIToUTF8(MVMuint16 acp, const char* str)
{
    wchar_t * const wstr = ANSIToUnicode(acp, str);
    char  * const result = UnicodeToUTF8(wstr);

    free(wstr);
    return result;
}
コード例 #8
0
ファイル: ServerComm.cpp プロジェクト: stfzy/MyNotepad
bool CServerComm::RegesiterUser(PTCHAR ptszUsername,PTCHAR ptszPassword,PTCHAR ptszPasswordReplay,PTCHAR ptszEmail, int& iErroCode, PTCHAR erroMsg)
{
	PTCHAR pBuffer =NULL; 
	TCHAR szLoginUrl[1024] = {0},szServerUrl[1024] = {0},szLocalPath[1024];
	//验证两次密码是否same
	if(_tcscmp(ptszPasswordReplay,ptszPassword) != 0)
	{
		_tcscpy_s(erroMsg,MAX_PATH,regPassNotSameErro);
		return false;
	}
	//将密码md5加密
	char szMd5Pass[33] = {0};
	Md5Encode(ptszPassword,szMd5Pass); 
	//获取当前目录
	GetCurrentDirectory(1024,szLocalPath);
	if(GetLastError() != 0)
		return false;

	//将加密后的MD5转换为unicode字符
	WCHAR * md5Pass = ANSIToUnicode(szMd5Pass);
	_tcscat_s(szLocalPath,1024,L"\\");
	_tcscat_s(szLocalPath,1024,CONFIG_NAME);

	//获取请求地址
	GetPrivateProfileString(_T("config"),_T("serverurlregi"),_T(""),szServerUrl,1024,szLocalPath); 
	if(GetLastError() != 0)
	{
		_tcscpy_s(erroMsg,MAX_PATH,configErroMsg); 
		return false; 
	}
	_stprintf_s(szLoginUrl,1024,REGI_PARAM,szServerUrl,ptszUsername,md5Pass,ptszEmail);
	delete[] md5Pass;
	//发送请求读取回执
	if(m_InterNetCon->InternetReadData(szLoginUrl,&pBuffer))
	{
		int iStatus;
		if(GetStatusAndErroCode((char*)pBuffer,&iStatus,&iErroCode))
		{
			if(iStatus == 0)
			{
				_tcscpy_s(erroMsg,MAX_PATH,regiErroCode[iErroCode]); 
				return false;
			}
		}
		_tcscpy_s(erroMsg,MAX_PATH,regSuccessMsg);
		return true;
	}
	else
	{ 
		_tcscpy_s(erroMsg,MAX_PATH,commErroMsg);
		return false;
	} 
	return true;
}
コード例 #9
0
ファイル: dspdisp.cpp プロジェクト: dilane007/D_DSP
// convert a string to a BSTR
int CstrToBstr (char *str, BSTR *pbstr)
{
	wchar_t *wsz = NULL;
	int status = TRUE;

	ANSIToUnicode(str, &wsz);
	*pbstr = ::SysAllocString(wsz);

	if (*pbstr == NULL) 
	{
		status = FALSE;
	}
	free(wsz);

	return(status);
}
コード例 #10
0
ファイル: BaseFile.cpp プロジェクト: zhangshpX/Test
//ANSI转换UTF8
char* ANSIToUTF8(const char* str)
{
	if (NULL == str)
	{
		return NULL;
	}
	char* result = NULL;
	wchar_t* pUTF16 = ANSIToUnicode(str);
	if (pUTF16)
	{
		result = UnicodeToUTF8(pUTF16);
		free(pUTF16);
		pUTF16 = NULL;
	}
	return result;
}
コード例 #11
0
ファイル: DataBaseManager.cpp プロジェクト: wfmdyh/wecan
BOOL CDataBaseManager::UpdateOne(CGPRSBigMeter meter)
{
	wstring strDevID = ANSIToUnicode(meter.GetDeviceID());
	//开始事务
	m_dbOracle.BeginTrans();
	//实时数据
	BOOL bResult = m_dbOracle.InsertRealMeterData(meter);
	if (!bResult)
	{
		m_dbOracle.RollbackTrans();
		return FALSE;
	}
	//历史数据
	int nRet = m_dbOracle.QueryRecordExist(strDevID, meter.GetBeforeDateString());
	switch (nRet)
	{
	case -1:
		//出错了
		m_dbOracle.RollbackTrans();
		return FALSE;
		break;
	case 0:
		//新记录
		if (!m_dbOracle.InsertMeterRecord(meter))
		{
			m_dbOracle.RollbackTrans();
			return FALSE;
		}
		break;
	default:
		if (!m_dbOracle.UpdateMeterRecord(meter))
		{
			m_dbOracle.RollbackTrans();
			return FALSE;
		}
		break;
	}
	
	//提交事务
	return m_dbOracle.CommitTrans();
}
コード例 #12
0
int ProcessWatch::FindHeavyProcess()
{
	
	int processCount = GetProcessID();
	for(int i=1; i<processCount; i++)
	{
		int cpu = GetProcessCpuUsage(m_vecProcessInfo[i].processID);
		
		//_tprintf(TEXT("%d, %d\n"), m_vecProcessInfo[i].processID, cpu);
		if(cpu>15)
		{
			char str[MAX_BUF_PATH] = {};
			TCHAR tstr[MAX_BUF_PATH] = {};
			sprintf_s(str, sizeof(str), "PID[%d]  cpu usage more than limited value: %d %%, the path is %s \n", 
							m_vecProcessInfo[i].processID, cpu, UnicodeToANSI(m_vecProcessInfo[i].processPath).c_str());
			_tcscpy_s(tstr, ANSIToUnicode(string(str)).c_str());
			WriteToLog(tstr);
			return m_vecProcessInfo[i].processID;
		}
	}
	return 0;
}
コード例 #13
0
ファイル: dspdisp.cpp プロジェクト: dilane007/D_DSP
/* this is a console application */
int main ()
{
	EXCEPINFO excepinfo;
	unsigned int argerr;
	SAFEARRAY *psa;
	DISPID dispid;	
	OLECHAR *name;
	VARIANT varResult;
	VARIANTARG varg, varga[2];
	BSTR bstrIn;
	IDispatch *pIDispatch = NULL;
	int status = 0;
	HRESULT hr;

	printf("dspdisp - DADiSP IDispatch Test, Initializing...\n");

	hr = OleInitialize(NULL);
	if (FAILED(hr)) 
	{
		trace("Failed to OleInitialize");
		return(1);
	}

	// Get the CLSID for the application.
	wchar_t progid[] = L"DADiSP.Application";
	CLSID clsid;
 	hr = ::CLSIDFromProgID(progid, &clsid);
	if(FAILED(hr))
	{
		trace("Failed to CLSIDFromProgID");
		status = 1;
		goto exitpt;
	}

	// start DADiSP as an automation server
	hr = ::CoCreateInstance(clsid,
	                        NULL,
	                        CLSCTX_LOCAL_SERVER,
	                        IID_IDispatch,
	                        (void**)&pIDispatch);
	if (FAILED(hr))
	{
		trace("CoCreateInstance Failed");
		status = 1;
		goto exitpt;
	}
	trace("CoCreateInstance Succeeded.");


	// ---------------------------
	//  dadisp.getdata("version")
	// ---------------------------

	// First we need to get the ID for the function name
	ANSIToUnicode("GetData", &name);

	hr = pIDispatch->GetIDsOfNames(IID_NULL,
	                               &name,
	                               1,
	                               GetUserDefaultLCID(),
	                               &dispid);
	if (FAILED(hr))
	{
		trace("Query GetIDsOfNames Failed");
		status = 1;
		goto exitpt;
	}
	
	trace("\ndadisp.getdata(\"version\")");

	// Convert the wide-character string to a BSTR.
	CstrToBstr("version", &bstrIn);

	// Build up the parameters for the invoke call.

	// Allocate and initialize a VARIANT argument.
	::VariantInit(&varg);      // Initialize the VARIANT.
	V_VT(&varg)   = VT_BSTR;   // Type of VARIANT data
	V_BSTR(&varg) = bstrIn;    // Data for the VARIANT

	// Fill in the DISPPARAMS structure.
	DISPPARAMS param;
	param.cArgs = 1;                 // Number of arguments
	param.rgvarg = &varg;            // Arguments
	param.cNamedArgs = 0;            // Number of named args
	param.rgdispidNamedArgs = NULL;  // Named arguments

	// Allocate a variant for the returned parameter.
	::VariantInit(&varResult);

	// Invoke the function.
	hr = pIDispatch->Invoke(dispid,
	                        IID_NULL,
	                        GetUserDefaultLCID(),
	                        DISPATCH_METHOD,
	                        &param,
	                        &varResult,
	                        &excepinfo,
	                        &argerr);
	if (FAILED(hr))
	{
		trace("Invoke Failed");
		ShowException(name, hr, &excepinfo, argerr);
		status = 1;
		goto exitpt;
	}

	// Display the returned value
	DisplayVariant(&varResult);


	// ------------------------------------
	//  dadisp.getdata("max(gnorm(100,1))")
	// ------------------------------------

	::SysFreeString(bstrIn);
	CstrToBstr("max(gnorm(100,1))", &bstrIn);

	// Build up the parameters for the invoke call.

	// Allocate and initialize a VARIANT argument.
	::VariantInit(&varg);      // Initialize the VARIANT.
	V_VT(&varg)   = VT_BSTR;   // Type of VARIANT data
	V_BSTR(&varg) = bstrIn;    // Data for the VARIANT

	// Fill in the DISPPARAMS structure.
	param.cArgs = 1;                 // Number of arguments
	param.rgvarg = &varg;            // Arguments
	param.cNamedArgs = 0;            // Number of named args
	param.rgdispidNamedArgs = NULL;  // Named arguments

	// Allocate a variant for the returned parameter.
	::VariantInit(&varResult);

	trace("\ndadisp.getdata(\"max(gnorm(100,1))\")");

	// Invoke the function.
	hr = pIDispatch->Invoke(dispid,
	                        IID_NULL,
	                        GetUserDefaultLCID(),
	                        DISPATCH_METHOD,
	                        &param,
	                        &varResult,
	                        &excepinfo,
	                        &argerr);
	if (FAILED(hr))
	{
		trace("Invoke Failed");
		ShowException(name, hr, &excepinfo, argerr);
		status = 1;
		goto exitpt;
	}

	// Display the returned value
	DisplayVariant(&varResult);



	// -------------------------------------
	//  dadisp.putdata("MyVar", RandomArray)
	// -------------------------------------

	free(name);
	ANSIToUnicode("Putdata", &name);

	hr = pIDispatch->GetIDsOfNames(IID_NULL,
	                               &name,
	                               1,
	                               GetUserDefaultLCID(),
	                               &dispid);
	if (FAILED(hr))
	{
		trace("Query GetIDsOfNames Failed");
		status = 1;
		goto exitpt;
	}

	// create a random array
	CreateRandomArray(darray, ARRAY_SIZE);

	// convert to automation SafeArray
	psa = DarrayToSafeArray(darray, ARRAY_SIZE, 1);

	::SysFreeString(bstrIn);
	CstrToBstr("MyVar", &bstrIn);

	// Allocate and initialize a VARIANT argument.
	// This routine has two arguments, must add in *reverse* order

	::VariantInit(&varga[1]);        // Initialize the VARIANT.
	V_VT(&(varga[1]))   = VT_BSTR;   // DADiSP variable name
	V_BSTR(&(varga[1])) = bstrIn;    // Data for the VARIANT

	::VariantInit(&varga[0]);              // Initialize the VARIANT.
	V_VT(&(varga[0]))    = VT_ARRAY|VT_R8; // Array of doubles
	V_ARRAY(&(varga[0])) = psa;            // Data for the VARIANT


	// Fill in the DISPPARAMS structure.
	param.cArgs = 2;                 // Number of arguments
	param.rgvarg = varga;            // Arguments
	param.cNamedArgs = 0;            // Number of named args
	param.rgdispidNamedArgs = NULL;  // Named arguments

	// Allocate a variant for the returned parameter.
	::VariantInit(&varResult);

	// Invoke the function.
	hr = pIDispatch->Invoke(dispid,
	                        IID_NULL,
	                        GetUserDefaultLCID(),
	                        DISPATCH_METHOD,
	                        &param,
	                        &varResult,
	                        &excepinfo,
	                        &argerr);
	if (FAILED(hr))
	{
		trace("Invoke Failed");
		ShowException(name, hr, &excepinfo, argerr);
		status = 1;
		goto exitpt;
	}

	// Display the input array
	trace("\nRandom Input Array:");

	DisplayVariant(&varga[0]);


	// ---------------------------------
	//  dadisp.getdata("fft(MyVar)")
	// ---------------------------------

	free(name);
	ANSIToUnicode("Getdata", &name);

	hr = pIDispatch->GetIDsOfNames(IID_NULL,
	                               &name,
	                               1,
	                               GetUserDefaultLCID(),
	                               &dispid);
	if (FAILED(hr))
	{
		trace("Query GetIDsOfNames Failed");
		status = 1;
		goto exitpt;
	}

	::SysFreeString(bstrIn);
	CstrToBstr("fft(MyVar)", &bstrIn);

	// Allocate and initialize a VARIANT argument.
	::VariantInit(&varg);      // Initialize the VARIANT.
	V_VT(&varg)   = VT_BSTR;   // Type of VARIANT data
	V_BSTR(&varg) = bstrIn;    // Data for the VARIANT


	// Fill in the DISPPARAMS structure.
	param.cArgs = 1;                 // Number of arguments
	param.rgvarg = &varg;            // Arguments
	param.cNamedArgs = 0;            // Number of named args
	param.rgdispidNamedArgs = NULL;  // Named arguments

	// Allocate a variant for the returned parameter.
	::VariantInit(&varResult);

	// Invoke the function.
	hr = pIDispatch->Invoke(dispid,
	                        IID_NULL,
	                        GetUserDefaultLCID(),
	                        DISPATCH_METHOD,
	                        &param,
	                        &varResult,
	                        &excepinfo,
	                        &argerr);
	if (FAILED(hr))
	{
		trace("Invoke Failed");
		ShowException(name, hr, &excepinfo, argerr);
		status = 1;
		goto exitpt;
	}

	// Display the returned array
	trace("\nFFT Output Array:");
	DisplayVariant(&varResult);

exitpt:

	// Release the dispatch interface.
	if (pIDispatch) pIDispatch->Release();

	// Uninitialize the OLE library.
	OleUninitialize();
	return(0);
}
コード例 #14
0
/*------------------------------------------------------------------------
* doTCP - handle a TCP service connection request
*------------------------------------------------------------------------
*/
void doTCPFTP(SOCKET s)
{
	PER_HANDLE_DATA * PerHandleData = (LPPER_HANDLE_DATA)GlobalAlloc(GPTR, sizeof(PER_HANDLE_DATA));	// 在堆中为这个PerHandleData申请指定大小的内存
	ZeroMemory(PerHandleData, sizeof(PER_HANDLE_DATA));
	LPPER_IO_OPERATION_DATA PerIoData = (LPPER_IO_OPERATION_DATA)GlobalAlloc(GPTR, sizeof(PER_IO_OPERATEION_DATA));
	ZeroMemory(PerIoData, sizeof(PER_IO_OPERATEION_DATA));

	PerHandleData->socket = s;
	_tcscpy_s(PerHandleData->strCurrentWorkPath, _TEXT(DEFAULT_WORKPATH));

	int zero = 0;
	if (setsockopt(PerHandleData->socket, SOL_SOCKET, SO_SNDBUF, (char *)&zero, sizeof(zero)) == SOCKET_ERROR)
	{
		printf("Set socket option Error %d", WSAGetLastError());
	}
	zero = 0;
	if (setsockopt(PerHandleData->socket, SOL_SOCKET, SO_RCVBUF, (char *)&zero, sizeof(zero)) == SOCKET_ERROR)
	{
		printf("Set socket option Error %d", WSAGetLastError());
	}

	char recvBuf[RECV_BUFFER_SIZE];
	memset((void *)recvBuf, 0, sizeof(recvBuf));
	if (recv(s, recvBuf, RECV_BUFFER_SIZE, 0) == -1)
	{
		cout << "At first, recv error." << endl;
		exit(-1);
	}
	cout << "A Client enter in, says: " << recvBuf << endl;

	// Begin to deal with ftp command
	while (true)
	{
		memset((void *)recvBuf, 0, sizeof(recvBuf));
		int recvConn = -1;
		if ((recvConn = recv(s, recvBuf, RECV_BUFFER_SIZE, 0)) < 0)
			continue;
		if (strcmp(recvBuf, "quit") == 0)
			break;
		strncpy_s(PerIoData->cmdBuffer, recvBuf, strlen(recvBuf) + 1);
		cout << "A Client says: " << recvBuf << endl;
		if (strncmp(recvBuf, "get ", 4) == 0)
		{
			// At first, judge the file is exist or not. or this file is a dir ?
			char *p = recvBuf + 4;
			while (*p == '\t' || *p == ' ') *p++;
			TCHAR *subFilename = ANSIToUnicode(PerIoData->cmdBuffer) + (p - recvBuf);
			int dirOrFileExistedFlag = issubFileOrDir(PerHandleData->strCurrentWorkPath, subFilename);
			// this sub string is a dir. 1: a dir, -1: not exist, 2: a file.
			if (dirOrFileExistedFlag != 2)
			{
				if (send(PerHandleData->socket, (const char *)&dirOrFileExistedFlag, sizeof(int), 0) < 0)
				{
					cout << "File attribute send error.\n";
					closesocket(PerHandleData->socket);
					exit(-1);
				}
				continue;
			}
			// if this is a dir. send a flag.
			int flag = ProcessGetCommand(PerHandleData, PerIoData);
			if (flag == 1)
			{
				cout << "This file is a dir, Please choose a file." << endl;
			}
			else if (flag == -1)
			{
				cout << "File send error.\n";
				closesocket(s);
				exit(-1);
			}
			continue;
		}
		else if (strcmp(recvBuf, "ls") == 0)
		{
			memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer));
			DWORD dwNumberOfDataSended = ProcessListCommand(PerHandleData, PerIoData);
		}
		else if (strncmp(recvBuf, "cd ", 3) == 0)
		{
			if (ProcessCdCommand(PerHandleData, PerIoData) == -1)
			{
				char tmp[88];
				sprintf_s(tmp, "Dir[File] %s is not existed.\n", recvBuf + 3);
				memset(PerIoData->buffer, 0, sizeof(PerIoData->buffer));
				_tcsncpy_s(PerIoData->buffer, ANSIToUnicode(tmp), strlen(tmp) + 1);
			}
		}
		else if (strncmp(recvBuf, "pwd", 3) == 0)
		{
			TCHAR talk[200];
			_tcscpy_s(talk, PerHandleData->strCurrentWorkPath);
			_tcscat_s(talk, L"\n");
			_tcscpy_s(PerIoData->buffer, talk);
		}
		else
		{
			char talk[200];
			sprintf_s(talk, "The client says: %s", recvBuf);
			_tcscpy_s(PerIoData->buffer, ANSIToUnicode(recvBuf));
		}

	//	cout << sizeof(PerIoData) << sizeof(PerIoData->buffer) << endl;
	//	wcout << _tcslen(PerIoData->buffer) << endl;
		if (send(PerHandleData->socket,
			UnicodeToANSI(PerIoData->buffer),
			2000,
			0) < 0)
		{
			perror("[server] send error.\n");
			closesocket(s);
			break;
		}
		// 判断此时客户端是否连接
	}
	closesocket(s);
}
コード例 #15
0
ファイル: encode.cpp プロジェクト: sairre/GeneralCodes
char* ANSIToUTF8(const char* str)
{
	return UnicodeToUTF8(ANSIToUnicode(str));
}
コード例 #16
0
/////////// TEXTENTRY
void MGUI_TextEntry::Paint(MGUI_Base *pBaseParent)
{
	if(!pParent) return;
	if(pParent == pBaseParent)
	{
		if(((MGUI_Panel *)pBaseParent)->m_iClosing) return;
		// Draw Bg
		//MH_DrawTGAFunction2(g_mgui_tga_imebg,x+pParent->x,pParent->y+y,w,48,255);
		// Draw Text
		Fonts_SetSize(20,20);
		Fonts_SetColor(0,0,0,255);
		wchar_t pWchar[255];
		Fonts_C2W(pWchar,255,m_pText);
		int iEnd=Fonts_Draw(pWchar,x+pParent->x+10,pParent->y+y+26,w,100);
		// Draw Line
		if(m_bHasFocus)
		{
			// Draw IME
			if(CandidateList)
			{
				if( g_bDrawIme) 
				{
					Fonts_SetSize(20,20);
					if(CandidateList->dwCount>1)
					{
						int iLong = 0;
						for(int i=0; i < CandidateList->dwCount;i++)
						{
							char *pText = (char*)CandidateList + CandidateList->dwOffset[ i ] ;
							if(pText)
							{
								int iTemp = strlen(pText);
								if(iTemp>iLong) iLong = iTemp; 

							}
						}
						// Draw INSIDE
						Fonts_SetColor(255,0,0,255);
						gEngfuncs.pfnFillRGBA(iEnd,pParent->y+y+26-20,iLong *10 + 20,24,135,135,135,255);
						iEnd = Fonts_Draw(ANSIToUnicode((char*)CandidateList + CandidateList->dwOffset[0]),iEnd,pParent->y+y+26,1000,100);
						// Draw LIST
						int iTotal = CandidateList->dwCount;
						gEngfuncs.pfnFillRGBA(iEnd-10,pParent->y+y - 24*CandidateList->dwCount,iLong*10+40,24*CandidateList->dwCount,40,40,40,255);

						// GetLongest
						for(int i=0; i < CandidateList->dwCount;i++)
						{ 
							char *pText = (char*)CandidateList + CandidateList->dwOffset[ i ] ;
							if(pText)
							{
								Fonts_SetColor(255,255,255,255);
								char Content[256];
								sprintf(Content,"%d.%s",i+1,pText);
								Fonts_Draw(ANSIToUnicode(Content),iEnd,pParent->y+y - (iTotal-i)*24 +2+18,1000,100);
							}
						}
					}
				}
			}
			float fDelta = g_flTime;
			fDelta-=(int)fDelta;
			if(fDelta > 0.5)
			{
				Fonts_Draw(L"|",iEnd,pParent->y+y+26,w,100);
			}

		}
	}
	return;
}