コード例 #1
0
ファイル: PackageParser.hpp プロジェクト: SJasson/vle
inline Packages::size_type PackageParser::size() const
{
    return m_packages.size();
}
コード例 #2
0
ファイル: netstream.cpp プロジェクト: iamnilay3/openlierox
static bool composePackagesForConn(CBytestream& bs, const SmartPointer<NetControlIntern>& con, Net_ConnID connid) {
	assert(connid != INVALID_CONN_ID);
	
	typedef std::list<NetControlIntern::DataPackage*> Packages;
	Packages packages;
	
	for(NetControlIntern::Packages::iterator i = con->packetsToSend.begin(); i != con->packetsToSend.end(); ++i)
		if(i->connID == INVALID_CONN_ID || i->connID == connid) {
			if(!isServerNetConnID(connid)) {
				CServerConnection* cl = serverConnFromNetConnID(connid);
				if(!cl->gusLoggedIn()) {
					if(i->type == NetControlIntern::DataPackage::GPT_ConnectResult)
						cl->gusLoggedIn() = true;
					else
						continue;
				}
			}
			
			if(i->nodeMustBeSet() || i->node.get()) {
				if(i->node.get() == NULL) {
					errors << "composePackagesForConn: node must be set but is unset" << endl;
					continue;
				}
				
				if(!con->isServer) {
					if(i->repRules & Net_REPRULE_OWNER_2_AUTH) {
						if(i->node->ownerConn != con->myConnIdOnServer)
							continue;
					}
					else
						continue;
				}
				else { // server
					bool trgtIsOwner = i->node->ownerConn == connid;
					if(trgtIsOwner && !(i->repRules & Net_REPRULE_AUTH_2_OWNER))
						continue;
					if(!trgtIsOwner && !(i->repRules & Net_REPRULE_AUTH_2_PROXY))
						continue;
				}
			}
			else { // no node
				if(i->repRules != Net_REPRULE_NONE)
					warnings << "reprules should be none for gus package of type " << i->type << endl;
			}
			
			if(i->type == NetControlIntern::DataPackage::GPT_NodeUpdate)
				con->nodeUpdateManager[connid].pushUpdate(*i);
			else
				packages.push_back(&*i);
		}
	
	if(packages.size() == 0) return false;
	
	bs.writeByte(con->isServer ? (uchar)S2C_GUSANOS : (uchar)C2S_GUSANOS);
	writeEliasGammaNr(bs, packages.size() - 1);
	for(Packages::iterator i = packages.begin(); i != packages.end(); ++i)
		(*i)->send(bs);
	
	//bs.Dump();
	return true;
}