Example #1
0
/*
================
SV_ConnectClient

Initializes a client_t for a new net connection.  This will only be called
once for a player each game, not once for each level change.
================
*/
void SV_ConnectClient(int clientnum)
{
	edict_t			*ent;
	client_t		*client;
	int				edictnum;
	struct qsocket_s *netconnection;
	int				i;
	float			spawn_parms[NUM_SPAWN_PARMS];

	client = svs.clients + clientnum;

	Con_DPrintf("Client %s connected\n", client->netconnection->address);

	edictnum = clientnum+1;

	ent = EDICT_NUM(edictnum);

// set up the client_t
	netconnection = client->netconnection;

	if (sv.loadgame)
	{
		memcpy(spawn_parms, client->spawn_parms, sizeof(spawn_parms));
	}
	memset(client, 0, sizeof(*client));
	client->netconnection = netconnection;

	strcpy(client->name, "unconnected");
	client->active = true;
	client->spawned = false;
	client->edict = ent;
	client->message.data = client->msgbuf;
	client->message.maxsize = sizeof(client->msgbuf);
	client->message.allowoverflow = true;		// we can catch it

#ifdef IDGODS
	client->privileged = IsID(&client->netconnection->addr);
#else
	client->privileged = false;
#endif

	if (sv.loadgame)
	{
		memcpy(client->spawn_parms, spawn_parms, sizeof(spawn_parms));
	}
	else
	{
		// call the progs to get default spawn parms for the new client
		PR_ExecuteProgram(pr_global_struct->SetNewParms);
		for (i=0 ; i<NUM_SPAWN_PARMS ; i++)
		{
			client->spawn_parms[i] = (&pr_global_struct->parm1)[i];
		}
	}

	SV_SendServerinfo(client);
}
void CParser::ParseDataType(int nTabs)
{	
	CString sToken = m_oToken.GetCurrentToken();
	m_sProgress = m_sProgress + GetTabs(nTabs) + 
		"ParseDataType " + sToken;

	if(sToken == "Boolean" || sToken == "Byte" 
			|| sToken == "Currency" || sToken == "Date" 
			|| sToken == "Double" || sToken == "Integer" 
			|| sToken == "Long" || sToken == "Object" 
			|| sToken == "Single" || sToken == "String" 
			|| sToken == "Variant" || IsID() == true)
	{
		sToken = m_oToken.GetNextToken();
		if(sToken == ".")
		{
			sToken = m_oToken.GetNextToken();
			if(IsID() == false)
				m_sProgress = m_sProgress + GetTabs(nTabs+1) +
					GetErrorString();
			else
				m_sProgress = m_sProgress + "." + sToken;

			m_oToken.GetNextToken();
		}
		
		//return;
	}
	else if(sToken == "," || sToken == ")")
	{
		m_sProgress = m_sProgress + GetTabs(nTabs+1) +
			GetErrorString();
		//return;
	}
	else
	{
		m_sProgress = m_sProgress + GetTabs(nTabs+1) +
			GetErrorString();
		m_oToken.GetNextToken();
		//return;
	}	
	m_sProgress = m_sProgress + "\r\n";
}
void CParser::ParseID(int nTabs)
{	
	CString sToken = m_oToken.GetCurrentToken();
	m_sProgress = m_sProgress + GetTabs(nTabs) + 
		"ParseID " + sToken + "\r\n";
	//ETokenType tt = m_oToken.GetCurrentTokenType();
	//CString stt = m_oToken.GetCurrentTokenTypeInString();
	if(IsID() == false)
		m_sProgress = m_sProgress + GetTabs(nTabs+1) 
			+ GetErrorString();
	//if(tt != ttFunction)		
	//else
		//m_sProgress = m_sProgress + "\t\t\t\t\tNOT function\r\n";
	m_oToken.GetNextToken();
}
void CParser::ParseExpressionFactor(int nTabs)
{
	CString sToken = m_oToken.GetCurrentToken();
	ETokenType tt = m_oToken.GetCurrentTokenType();
	m_sProgress = m_sProgress + GetTabs(nTabs) 
		+ "ParseExpressionFactor " + sToken + "\r\n";
	
	if(IsID() == true)
		ParseID(nTabs+1);
	else if(tt == ttNumber)	
		ParseNumber(nTabs+1);	
	else if(tt == ttFunctionStartBracket)
	{
		m_sProgress = m_sProgress + GetTabs(nTabs+1) 
		+ "ParseStartBarcket " + sToken + "\r\n";

		m_oToken.GetNextToken();

		ParseExpression(nTabs+1);

		sToken = m_oToken.GetCurrentToken();

		m_sProgress = m_sProgress + GetTabs(nTabs+1) 
		+ "ParseEndBarcket " + sToken + "\r\n";

		if(sToken != ")")
			m_sProgress = m_sProgress + GetTabs(nTabs+1) 
				+ GetErrorString();

		m_oToken.GetNextToken();
	}	
	//else if(tt == ttFunctionEndBracket)
	//{
		//m_oToken.GetNextToken();
		//return;
	//}
	else
	{
		m_sProgress = m_sProgress + GetTabs(nTabs+1) 
			+ GetErrorString();

		m_oToken.GetNextToken();
	}
}
void CParser::ParseArgumentScope()
{	
	int nTabs = 7;
	CString sToken = m_oToken.GetCurrentToken();
	m_sProgress = m_sProgress + GetTabs(nTabs) + 
		"ParseArgumentScope " + sToken + "\r\n";

	if(sToken == "ByRef" || sToken == "ByVal")
	{
		m_oToken.GetNextToken();
		return;
	}

	if(IsID() == false)
	{
		m_sProgress = m_sProgress + GetTabs(nTabs+1) +
			GetErrorString();

		m_oToken.GetNextToken();
	}
}