// 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
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; }
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; }