void RemoteObjectConnection::readyRead() { //qDebug() << "[RemoteObjectConnection.Debug] ServerSocket::readyRead: " << fSocket->bytesAvailable(); for(;;) { if( fSize==-1 && fSocket->bytesAvailable()>=8 ) { fStream >> fHash >> fSize; //qDebug() << "[RemoteObjectConnection.Debug] ServerSocket::readyRead: " << fHash << " " << fSize; } if( fSize==-1 || (int)fSocket->bytesAvailable()<fSize ) { break; } //qDebug() << "[RemoteObjectConnection.Debug] ServerSocket::readyRead: read command"; QByteArray data = fSocket->read( fSize ); assert( data.size() ==fSize ); QDataStream stream( &data, QIODevice::ReadOnly ); fSize = -1; switch( fHash ) { case RO_TARGETDIRECTORY: decodeTargetDirectory(stream); break; case RO_STATFILE: decodeStatFileReq( stream ); break; case RO_STATFILEREPLY: decodeStatFileReply( stream ); break; case RO_SENDFILE: decodeSendFile( stream ); break; case RO_SENDFILERESULT: decodeSendFileResult( stream ); break; case RO_VERSION: decodeVersion( stream ); break; case RO_DELETEFILE: decodeDeleteFile( stream ); break; default: emit recvUnknownPacket(); } }
bool Mz::load( const std::string& fileName ) { // destroy(); mzFileName_ = fileName; std::string mziFileName(fileName + "i"); mziFileName = FileSystem::standardFilePath(mziFileName); loadMzI(mziFileName); // std::ifstream f(fileName.c_str(), std::ios::binary); if (!f.good()) { return NULL; } // [Tag Size Data] int t; int s; while(f.good()) { t = 0; s = 0; f.read((char*)&t, sizeof(int)); f.read((char*)&s, sizeof(int)); if (s <= 0) { continue; } char c[5]; c[0] = *((char*)&t + 3); c[1] = *((char*)&t + 2); c[2] = *((char*)&t + 1); c[3] = *((char*)&t + 0); c[4] = 0; switch (t) { case 'MVER': { decodeVersion(f, s); } break; case 'MSUB': { decodeSubMesh(f, s); } break; case 'MVTX': { decodeVertices(f, s); } break; case 'MFAC': { decodeFaces(f, s); } break; case 'MMTX': // 模型的材质 { decodeMaterial(f, s); } break; case 'MANM': { decodeAnimation(f, s); } break; case 'MWRD': { //废弃 u32 numBones; f.read((char*)&numBones,sizeof(numBones)); struct tranMatrix { float m_mat[4][3]; }; for(int i = 0;i < numBones;i++) { tranMatrix tm; f.read((char*)&tm,sizeof(tm)); } } break; case 'MBON': // 模型骨骼信息 { decodeBone(f, s); } break; default: { f.ignore(s); //Error("遇到无法识别的数据块"); } break; } } f.close(); // if (!mParticleEmitter.empty()) { tstring n = FileSystem::removeParent(mzFileName_); n = FileSystem::removeFileExtension(n); tstring fn = FileSystem::getDataDirectory(); std::ostringstream ss; for (size_t i = 0; i != mParticleEmitter.size(); ++i) { ss.str(""); ss.clear(); ss<<fn<<"\\particle\\"<<n<<"_"<<i<<".particle"; mParticleEmitter[i].save(ss.str()); } } return true; }