コード例 #1
0
ファイル: F849014.cpp プロジェクト: nykma/ykt4sungard
int F849014(TRUSERID *handle,int iRequest,ST_PACK *in_pack,int *pRetCode,char *szMsg)
{
	int ret=0;
	int card_id = 0;
	T_t_pif_card tCard;
	char buf[64] = "";
	char comments[256] = "";
	char reqdata[1024] = "";
	char temp[1024] = "";
	ST_CPACK aPack;
	ST_PACK* out_pack = &(aPack.pack);
	char svr_ip[21 ] = "";
	int svr_port = 0;

	CTcpSocket sock;
	KSG_GW_PACK_t * resp = NULL;

	if(strlen(in_pack->sname) < 1)
	{
		*pRetCode = E_INPUT_DORM_NO;
		goto L_RETU;
	}
	ResetNormalCPack(&aPack,0,1);
	SetCol(handle,0);
	SetCol(handle,F_VSMESS,0);

	ret = GetPowerServerInfo(svr_ip,&svr_port);
	if(ret)
	{
		*pRetCode = ret;
		goto L_RETU;
	}
	gw_server_info_t svrinfo;
	des2src(svrinfo.server_ip,svr_ip);
	svrinfo.server_port = svr_port;
	svrinfo.sock = &sock;
	AddXmlItemStr(temp,XML_KEY_DORM_NO,in_pack->sname);
	writelog(LOG_DEBUG,"xml[%s]",temp);
	sprintf(reqdata,"<YKT_DATA>%s</YKT_DATA>",temp);
	writelog(LOG_DEBUG,"xml[%s]",reqdata);
	ret = SendToServer(&svrinfo,QUERY_DORM_NAME,reqdata);
	if(ret)
	{
		writelog(LOG_DEBUG,"电控返回数据[%d]",ret);
		*pRetCode =ret;
		goto L_RETU;
	}

	ret = RecvFromServer(&svrinfo,&resp);
	if(ret)
	{
		writelog(LOG_DEBUG,"电控返回数据[%d]",ret);
		*pRetCode = ret;
		goto L_RETU;
	}
	else
	{
		if(resp->func_no != QUERY_DORM_NAME || resp->retcode != 0)
		{
			writelog(LOG_DEBUG,"funcno [%d] ret[%d]",resp->func_no,resp->retcode);
			*pRetCode = E_POWER_RECV_ERR;
			goto L_RETU;
		}
		des2src(reqdata,resp->data);
		ret = GetXmlValue(comments,sizeof comments,XML_KEY_DORM_NAME,reqdata);
		if(ret)
		{
			writelog(LOG_DEBUG,"无数据[%s][%d]",reqdata,ret);
			*pRetCode = ret;
			goto L_RETU;
		}
		des2src(out_pack->vsmess,comments);
		PutRow(handle,out_pack,pRetCode,szMsg);
	}
	if(resp)
		free(resp);
	return 0;
L_RETU:
	if(resp)
		free(resp);
	return -1;
}
コード例 #2
0
ファイル: cepollclient.cpp プロジェクト: schidler/code
int CEpollClient::RunFun()
{
        int isocketfd = -1;
        for(int iuserid=0; iuserid<m_iUserCount; iuserid++)
        {
                struct epoll_event event;
                isocketfd = ConnectToServer(iuserid, m_ip, m_iPort);
                if(isocketfd < 0)
                        cout <<"[CEpollClient error]: RunFun, connect fail" <<endl;
                m_iSockFd_UserId[isocketfd] = iuserid;//将用户ID和socketid关联起来
                event.data.fd = isocketfd;
                event.events = EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP;
                m_pAllUserStatus[iuserid].uEpollEvents = event.events;
                epoll_ctl(m_iEpollFd, EPOLL_CTL_ADD, event.data.fd, &event);
        }

		int flag=0;	
		struct timeval val1,val2;
		gettimeofday(&val1,NULL);
        while(!flag){
                struct epoll_event events[_MAX_SOCKFD_COUNT];
				gettimeofday(&val2,NULL);
				//if((val2.tv_sec -val1.tv_sec)>10) 
					//flag=1;
                char buffer[1024];
                memset(buffer,0,1024);
                int nfds = epoll_wait(m_iEpollFd, events, _MAX_SOCKFD_COUNT, 100 );//等待epoll事件的产生
                for (int ifd=0; ifd<nfds; ifd++)//处理所发生的所有事件
                {
                        struct epoll_event event_nfds;
                        int iclientsockfd = events[ifd].data.fd;
                        //cout << "events[ifd].data.fd: " << events[ifd].data.fd << endl;
                        int iuserid = m_iSockFd_UserId[iclientsockfd];//根据socketfd得到用户ID
                        if( events[ifd].events & EPOLLOUT )
                        {
                                int iret = SendToServerData(iuserid);
                                if( 0 < iret )
                                {
                                        event_nfds.events = EPOLLIN|EPOLLERR|EPOLLHUP;
                                        event_nfds.data.fd = iclientsockfd;
                                        epoll_ctl(m_iEpollFd, EPOLL_CTL_MOD, event_nfds.data.fd, &event_nfds);
                                }
                                else
                                {
                                        cout <<"[CEpollClient error:] EpollWait, SendToServerData fail, send iret:"<<iret<<",iuserid:"<<iuserid<<",fd:"<<events[ifd].data.fd<<endl;
                                        DelEpoll(events[ifd].data.fd);
                                        CloseUser(iuserid);
                                }
                        }
                        else if( events[ifd].events & EPOLLIN )//监听到读事件,接收数据
                        {
                                int ilen = RecvFromServer(iuserid, buffer, 1024);
                                if(0 > ilen)
                                {
                                        cout <<"[CEpollClient error]: RunFun, recv fail, reason is:"<<strerror(errno)<<",errno is:"<<errno<<endl;
                                        DelEpoll(events[ifd].data.fd);
                                        CloseUser(iuserid);
                                }
                                else if(0 == ilen)
                                {
                                        cout <<"[CEpollClient warning:] server disconnect,ilen:"<<ilen<<",iuserid:"<<iuserid<<",fd:"<<events[ifd].data.fd<<endl;
                                        DelEpoll(events[ifd].data.fd);
                                        CloseUser(iuserid);
                                }
                                else
                                {
								read_num++;	
                                m_iSockFd_UserId[iclientsockfd] = iuserid;//将socketfd和用户ID关联起来
                                event_nfds.data.fd = iclientsockfd;
                                event_nfds.events = EPOLLOUT|EPOLLERR|EPOLLHUP;
                                //event_nfds.events = EPOLLERR|EPOLLHUP;
                                epoll_ctl(m_iEpollFd, EPOLL_CTL_MOD, event_nfds.data.fd, &event_nfds);
                                
									
								}
                        }
                        else
                        {
                                cout <<"[CEpollClient error:] other epoll error"<<endl;
                                DelEpoll(events[ifd].data.fd);
                                CloseUser(iuserid);
                        }
                }
        }

		printf("read: %d\n",read_num);
}