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();
    }
  }
Esempio n. 2
0
File: Mz.cpp Progetto: cpzhang/zen
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;
}