//----------------------------------------------------------------------------- void ServerNetApplyManager::onConnected(NetEventConnect* netEvent) { IServerDllInterface* serverInterface = ServerMain::getInstance().getServerDllInterface(); if (serverInterface) { if (netEvent->getHandle()==mServerDriver) { //U64 serverUniqueFlag = netEvent->getNetAddress().getIP() * ::GetCurrentProcessId(); setConnectServerLoginState(netEvent->getNetAddress().getUin(),netEvent->getID(),true,false); Sleep(5); loginServer( netEvent->getID(),mUniqueFlag); //MG_LOG(out_error,"onConnect %s %d \n",netEvent->getNetAddress().getIPStr(),netEvent->getNetAddress().getPort()); } } }
//外网模式下,服务器在线测试 USER_FUNC void pingTest(void *arg) { while (getPingServerThreadFlag()) { sleep(5); pingServer(); sleep(120); u_printf("check ping result"); if (getPingResultFlag()) { //if ping result is correct setPingResultFlag(0); } else { //若ping服务器无反应,则释放资源并让主板重新上线 resetPingData(); //关闭socket连接 closeSocket(getSocketFd()); sleep(10); //10s后主板开始重新上线 initPingData(); connectServer(); loginServer(); if (hfthread_create(recvTest, "RECV_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) { u_printf("create recvMessage thread fail\n"); } if (hfthread_create(pingTest, "PING_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) { u_printf("create pingServer thread fail\n"); } } } }
//----------------------------------------------------------------------------- void ServerNetApplyManager::onAccept(NetEventAccept* netEvent) { IServerDllInterface* serverInterface = ServerMain::getInstance().getServerDllInterface(); if (serverInterface) { if (netEvent->getHandle() == mClientDriver) { serverInterface->onClientConnected(netEvent->getID(),&netEvent->getNetAddress(),netEvent->getNetConnect()); }else if (netEvent->getHandle() == mServerDriver) { if (isAllowedConnect(netEvent->getNetAddress().getIPStr())) { //setConnectServerLoginState(netEvent->getNetAddress().getUin(),true,false); loginServer( netEvent->getID(),mUniqueFlag); } else { closeServer(netEvent->getID()); } } } }
//主函数 int app_main(void) { time_t now = time(NULL); hfdbg_set_level(3); HF_Debug(DEBUG_LEVEL,"[FILE DEMO]sdk version(%s),the app_main start time is %d %s\n",hfsys_get_sdk_version(), now, ctime(&now)); if (hfgpio_fmap_check(HFM_TYPE_LPB100) != 0) { while (1) { HF_Debug(DEBUG_ERROR, "gpio map file error\n"); msleep(1000); } //return 0; } while (!hfnet_wifi_is_active()) { msleep(50); } if (hfnet_start_assis(ASSIS_PORT) != HF_SUCCESS) { HF_Debug(DEBUG_WARN, "start httpd fail\n"); } if (hfnet_start_httpd(HFTHREAD_PRIORITIES_MID) != HF_SUCCESS) { HF_Debug(DEBUG_WARN, "start httpd fail\n"); } #ifndef TEST_UART_SELECT // if (hfnet_start_uart(HFTHREAD_PRIORITIES_LOW, NULL) != HF_SUCCESS) // { // HF_Debug(DEBUG_WARN, "start uart fail!\n"); // } #endif sleep(2); //创建一个udp方便调试程序 if((udp_fd = socket(AF_INET,SOCK_DGRAM,0)) == -1) { u_printf("create socket error!\n"); exit(1); } bzero(&address,sizeof(address)); address.sin_family=AF_INET; address.sin_addr.s_addr=inet_addr("115.28.179.114"); address.sin_port=htons(8123); //在主函数中打开串口 if ((huart = hfuart_open(0))<0) { u_printf("open_port error!"); exit(1); } /*内网模式:初始化相关数据,开启udp服务,开启接收线程*/ /* //初始化udp相关数据 initUdpAddrData(); //开启udp服务 startUdpServer(); //创建一个线程接收udp数据 if (hfthread_create(udpRecvTest, "RECV_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) { u_printf("create udpRecv thread fail\n"); return 0; } */ /*外网模式:初始化相关数据,并连接登陆服务器,开启相关线程*/ //初始化数据 initData(); //连接服务器 connectServer(); //登陆服务器 loginServer(); //创建一个线程接收数据 if (hfthread_create(recvTest, "RECV_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) { u_printf("create recvMessage thread fail\n"); return 0; } //创建一个线程监测主板的在线状态 if (hfthread_create(pingTest, "RECON_THREAD", 256, NULL,HFTHREAD_PRIORITIES_LOW, NULL, NULL) != HF_SUCCESS) { u_printf("create pingServer thread fail\n"); return 0; } return 1; }
void main() { int sfd = tcp_connect(); int epfd = epoll_create(1); struct epoll_event evs[2]; memset(evs,0,sizeof(struct epoll_event)); epfd_add(sfd,epfd); epfd_add(0,epfd); //注册epoll char buf[1024]; char filename[20] = {0}; char *pname; int ret; int n; int i; loginServer(sfd); while(1) { memset(evs,0,sizeof(struct epoll_event)); n = epoll_wait(epfd,evs,2,-1); if(n > 0) { for(i = 0; i < n; i++) { if(evs[i].data.fd == 0) { memset(buf,0,sizeof(buf)); ret = read(0,buf,sizeof(buf)); if(ret == 0)//ctrl+d { printf("bye\n"); close(sfd); exit(0); } send(sfd,buf,strlen(buf)-1,0); if(strncmp("puts",buf,4) == 0) { memset(filename,0,sizeof(filename)); strcpy(filename,buf+4); pname = filename; while(*pname == ' ') pname++; send_file(sfd,pname); } } if(evs[i].data.fd == sfd) { if(strncmp("gets",buf,4) == 0) { memset(buf,0,sizeof(buf)); recv(sfd,buf,1,0); if(buf[0] == '1') { recv_file(sfd); } else if(buf[0] == '2') { mmaprecefile(sfd); } else printf("file not exist\n"); } else { memset(buf,0,sizeof(buf)); ret =recv(sfd,buf,sizeof(buf),0); if(ret == 0) { printf("bye sfd\n"); close(sfd); exit(-1); } system("clear"); printf("%s\n",buf); } } } } } close(sfd); return; }