Exemplo n.º 1
0
// encode_symbol_aux
void encode_symbol_aux(Val stream, Val str)
{
    static char k_wszMap[] =
        "________________"  // #x00
        "________________"  // #x10
      //  !"#$%&'()*+,-./
        "_____ZA___APC_DS"  // #x20
      // 0123456789:;<=>?
        "0123456789CSLEGQ"  // #x30
        "_abcdefghijklmno"
        "pqrstuvwxyz[\\]^_"
        "_abcdefghijklmno"
        "pqrstuvwxyz{|}~_";

    Val len = length(str);
    for (Val i = Fixnum::Encode(0); cmp_xx(i, len) < 0; i = add_xx(i, 1))
    {
        Int ch = Character::ToCode(schar(str, i));
        if (ch >= 0 && ch < lengthof(k_wszMap))
        {
            write_char(k_wszMap[ch], stream);
        }
        else
        {
            write_char('_', stream);
        }
    } // for
} // encode_symbol_aux
Exemplo n.º 2
0
A gstr(I n, const C *s) { A z;
    ASSERT(n>0,ERDOM);
    if (n==1) { z=schar(*s); }
    else { z=ga(CHAR,1,n,NULL); strncpy(CAV(z),s,n); }
    R z;
}
Exemplo n.º 3
0
	bool CServer::parse_msg(RakNet::Packet* packet)
	{
#pragma region DEBUG_OUTPUT
#if DB_NET_MSG_CNT
		switch (packet->data[0])
		{
		case ID_NEW_INCOMING_CONNECTION:{
											printf("S : Incoming Connection from: \t\t%s\n", packet->systemAddress.ToString());
											break; }
		case ID_DISCONNECTION_NOTIFICATION:{
											   printf("S : Disconnection from: \t\t%s\n", packet->systemAddress.ToString());
											   break; }
		case ID_CONNECTION_LOST:{
									printf("S : Lost Connection from: \t\t%s\n", packet->systemAddress.ToString());
									break; }
		case ID_UNCONNECTED_PING:{
									 printf("S : Received Ping Broadcast from: \t%s\n", packet->systemAddress.ToString());
									 break; }
		case ID_TIMESTAMP:{
							  printf("S : Received Msg from: \t\t\t%s\n", packet->systemAddress.ToString());
							  break;	}
		default: {
					 printf("S : Received Identifier %i from: \t\t%s\n", packet->data[0], packet->systemAddress.ToString());
					 break; }
		}
#endif
#pragma endregion
		
		//Set Msg Type
		CNetMsg msg = CNetMsg(ENetMsg(packet->data[0]));

		//If connecting client then give an id
		if (packet->data[0] == ID_NEW_INCOMING_CONNECTION)
		{
			this->connect_client(packet);
		}

		//Get Peer Data
		TPeer peer;
		peer.m_Addr = packet->systemAddress;
		peer.m_Guid = packet->guid;
		ulong size = this->m_vClients.size();
		for (ulong i = 0; i < size; ++i)
		{
			if (this->m_vClients[i].m_Guid == peer.m_Guid)
			{
				peer.m_scID = schar(i);
				break;
			}
		}
		msg.SetPeer(peer);

		//If user type, then get data
		if (packet->data[0] == ID_TIMESTAMP)
		{
			//Get the header parts of the packet
			RakNet::BitStream		bsIn(packet->data, packet->length, false);
			uchar					useTimeStamp;
			RakNet::Time			timeStamp;
			uchar					typeID;
			//Read them in
			bsIn.Read((RakNet::MessageID)useTimeStamp);
			bsIn.Read(timeStamp);
			bsIn.Read((RakNet::MessageID)typeID);
			ulong offset = bsIn.GetReadOffset() / 8;
			//Parse into a CNetMsg
			msg.SetType(ENetMsg(typeID));
			msg.WriteRaw((const char*)(packet->data + offset), ushort(packet->length - offset));
			msg.SetTime(timeStamp);
#if DB_NET_MSG_SR
			printf("  : Client #%d\n", peer.m_scID);
			printf("  : Msg Type:\t%s\n", ENetMsgStr(msg.GetType()));
			printf("  : Msg Size:\t%d\n", msg.GetWrite());
			printf("  : Msg Time:\t%d\n", msg.GetTime());
#endif
		}

		//Add msg to vector
		this->m_vMsgs.push_back(msg);
		return true;
	}