bool NetworkMoudle::ReadControlPack(ControlPackage* pack,bool withTimeOut) // 读取控制包 { // 首先读取头部 PackageHead head; char buf[1024] = {0}; int len = 0; if (withTimeOut) { len = TryRead(buf,PACKAGE_HEAD_LEN);//recv(fd,buf,PACKAGE_HEAD_LEN,0); } else { len = Read(buf,PACKAGE_HEAD_LEN);//recv(fd,buf,PACKAGE_HEAD_LEN,0); } if (len <= 0) { return false; } head.Analyze(buf,len); pack->m_PackageHead = head; memset(buf,0,SZ_1024_LENGTH); if (withTimeOut) { len = TryRead(buf,head.GetPackageLength());//recv(fd,controlBuffer,head.GetPackageLength(),0); } else { len = Read(buf,head.GetPackageLength()); } if (len <= 0) { return false; } pack->Analyze(buf,len); return true; }
bool NetworkMoudle::ReadDataPackBody(PackageHead& head,DataPackage* pack,bool withTimeOut) { char buf[1024] = {0}; int len = 0; pack->m_PackageHead = head; memset(buf,0,SZ_1024_LENGTH); if (withTimeOut) { len = TryRead(buf,head.GetPackageLength());//recv(fd,controlBuffer,head.GetPackageLength(),0); } else { len = Read(buf,head.GetPackageLength()); } if (len <= 0) { return false; } pack->Analyze(buf,strlen(buf)); return true; }
//---------------------------------------------------------------------------------------------- void CRingBuffer::Read(unsigned char* pData, unsigned int Size) { bool Res = false; while(!Res) { Res = TryRead(pData, Size); if(!Res) { Sleep(0); } } }
bool NetworkMoudle::ReadDataPack(DataPackage& pack,bool withTimeOut) { char buf[SZ_1024_LENGTH] = {0}; int len = 0; if(withTimeOut) { len = TryRead(buf,PACKAGE_HEAD_LEN);//recv(m_nServerfd,buf,PACKAGE_HEAD_LEN,0); } else { len = Read(buf,PACKAGE_HEAD_LEN); } if (len <= 0) { return false; } pack.m_PackageHead.Analyze(buf,PACKAGE_HEAD_LEN); memset(buf,0,SZ_1024_LENGTH); if(withTimeOut) { len = TryRead(buf,pack.m_PackageHead.GetPackageLength());//recv(m_nServerfd,buf,PACKAGE_HEAD_LEN,0); } else { len = Read(buf,pack.m_PackageHead.GetPackageLength()); } if (len <= 0) { return false; } pack.Analyze(buf,len); return true; }
void CDatagrams::OnRun() { if ( ! IsValid() ) return; DHT.OnRun(); TryWrite(); ManageOutput(); do { ManagePartials(); } while ( TryRead() ); Measure(); }
bool NetworkMoudle::ReadPackageHead(PackageHead& head,bool withTimeOut) { char buf[1024] = {0}; int len = 0; if (withTimeOut) { len = TryRead(buf,PACKAGE_HEAD_LEN); } else { len = Read(buf,PACKAGE_HEAD_LEN); } if (len <= 0) { return false; } head.Analyze(buf,len); return true; }
EXPORT_C_(void) s2r_replay(HWND hwnd, HINSTANCE hinst, LPSTR filename, int nCmdShow) { #ifndef ENABLE_NEW_IOPDMA_SPU2 int events=0; Running = true; #ifdef WIN32 AllocConsole(); SetConsoleCtrlHandler(HandlerRoutine, TRUE); conprintf("Playing %s file on %x...",filename,hwnd); #endif // load file FILE *file=fopen(filename,"rb"); if(!file) { conprintf("Could not open the replay file."); return; } // if successful, init the plugin #define TryRead(dest,size,count,file) if(fread(dest,size,count,file)<count) { conprintf("Error reading from file."); goto Finish; /* Need to exit the while() loop and maybe also the switch */ } TryRead(&CurrentIOPCycle,4,1,file); replay_mode=true; InitWaitSync(); // Initialize the WaitSync stuff SPU2init(); SPU2irqCallback(dummy1,dummy4,dummy7); SPU2setClockPtr(&CurrentIOPCycle); SPU2open(&hwnd); CurrentIOPCycle=0; SPU2async(0); while(!feof(file) && Running) { u32 ccycle=0; u32 evid=0; u32 sval=0; u32 tval=0; TryRead(&ccycle,4,1,file); TryRead(&sval,4,1,file); evid=sval>>29; sval&=0x1FFFFFFF; u32 TargetCycle = ccycle * 768; while(TargetCycle > CurrentIOPCycle) { u32 delta = WaitSync(TargetCycle); SPU2async(delta); } switch(evid) { case 0: SPU2read(sval); break; case 1: TryRead(&tval,2,1,file); SPU2write(sval,tval); break; case 2: TryRead(dmabuffer,sval,2,file); SPU2writeDMA4Mem(dmabuffer,sval); break; case 3: TryRead(dmabuffer,sval,2,file); SPU2writeDMA7Mem(dmabuffer,sval); break; default: // not implemented return; break; } events++; } Finish: //shutdown SPU2close(); SPU2shutdown(); fclose(file); conprintf("Finished playing %s file (%d cycles, %d events).",filename,CurrentIOPCycle,events); #ifdef WIN32 FreeConsole(); #endif replay_mode=false; #endif }