Esempio n. 1
0
 bool test()
 {
   StringBuilder sb;
   sb.Clear();
   String s = *sb.ToString();
   return (s.length() == 0);
 }
 RF_Type::Bool Clear()
 {
     StringBuilder builder;
     builder.Append("test");
     RF_Type::Size capacity = builder.Capacity();
     builder.Clear();
     return builder.Capacity() == capacity && builder.Size() == 0 &&
         builder.Length() == 0;
 }
Esempio n. 3
0
 bool test()
 {
   StringBuilder sb;
   sb.Append("asdfg zxcvb");
   bool t1 = sb.Length() == 11;
   sb.Clear();
   bool t2 = sb.Length() == 0;
   return (t1 && t2);
 }
Esempio n. 4
0
 bool test()
 {
   StringBuilder sb;
   sb.Append("This is a test.");
   sb.Clear();
   sb.Append("That");
   String s = *sb.ToString();
   return (s == "That");
 }
Esempio n. 5
0
    bool test()

    {
      StringBuilder sb;
      sb.Append("This is a test.");
      sb.Clear();
      String s = *sb.ToString();
      return (s.length() == 0);
    }
Esempio n. 6
0
void ServerVolume::LogDebugInfo()
{
	info("   ---------- ServerVolume");

	StringBuilder msg;

	for (int i = 0; i < 60; i++)
	{
		char szNum[30];
		snprintf(szNum, 30, "[%i]=%lli ", i, m_BytesPerSeconds[i]);
		msg.Append(szNum);
	}
	info("Secs: %s", msg.GetBuffer());

	msg.Clear();
	for (int i = 0; i < 60; i++)
	{
		char szNum[30];
		snprintf(szNum, 30, "[%i]=%lli ", i, m_BytesPerMinutes[i]);
		msg.Append(szNum);
	}
	info("Mins: %s", msg.GetBuffer());

	msg.Clear();
	for (int i = 0; i < 24; i++)
	{
		char szNum[30];
		snprintf(szNum, 30, "[%i]=%lli ", i, m_BytesPerHours[i]);
		msg.Append(szNum);
	}
	info("Hours: %s", msg.GetBuffer());

	msg.Clear();
	for (int i = 0; i < (int)m_BytesPerDays.size(); i++)
	{
		char szNum[30];
		snprintf(szNum, 30, "[%i]=%lli ", m_iFirstDay + i, m_BytesPerDays[i]);
		msg.Append(szNum);
	}
	info("Days: %s", msg.GetBuffer());
}
Esempio n. 7
0
void DNSServer::parse_dns_packet(const Buffer& b, dnsreq& req)
{
	StringBuilder sb;
	UShort qs, as;
	const dnshdr* hdr;
	int i, index = sizeof(dnshdr);
	map<UShort, int> queries;
	if (b.Length < (int) sizeof(dnshdr))
		goto err;
	hdr = (const dnshdr*) b.Data;
	req.transaction_id = hdr->transaction_id;
	req.flags = ntohs(hdr->flags);
	req.queries = vector<query>();
	req.answers = vector<answer>();
	qs = ntohs(hdr->queries);
	as = ntohs(hdr->answers);
	for (i = 0; i < qs; i++)
	{
		sb.Clear();
		queries.insert(std::pair<UShort, int>(index, i));
		int tmp = read_dns_name(b, sb, index);
		index += tmp;
		const dnshdr_q* hdr1 = (const dnshdr_q*) (b.Data + index);
		if (index + (int) sizeof(dnshdr_q) > b.Length)
			goto err;
		query q
		{ sb.ToSTDString(), ntohs(hdr1->type), ntohs(hdr1->cls) };
		req.queries.push_back(q);
		index += sizeof(dnshdr_q);
	}
	for (i = 0; i < as; i++)
	{
		const dnshdr_a* hdr1 = (const dnshdr_a*) (b.Data + index);
		if (index + (int) sizeof(dnshdr_a) > b.Length)
			goto err;
		auto it = queries.find(ntohs(hdr1->offset) & ~dns_offset_mask);
		if (it == queries.end())
			goto err;
		index += sizeof(dnshdr_a);
		UShort tmp = ntohs(hdr1->datalen);
		if (index + (int) tmp > b.Length)
			goto err;
		Buffer buf(tmp);
		memcpy(buf.Data, b.Data + index, tmp);
		answer a
		{ (*it).second, ntohs(hdr1->type), ntohs(hdr1->cls), ntohl(hdr1->ttl), buf };
		req.answers.push_back(a);
	}
	return;
	err: throw Exception("invalid or corrupt DNS packet");
}
Esempio n. 8
0
void TeamFriend::deleteFriend(TCPConnection::Pointer conn, hf_uint32  roleid)
{
    SessionMgr::SessionPointer smap = SessionMgr::Instance()->GetSession();
    umap_friendList friendList = (*smap)[conn].m_friendList;

    umap_roleSock roleSock = SessionMgr::Instance()->GetRoleSock();

   _umap_friendList::iterator it = friendList->find(roleid);
    if(it == friendList->end()) //要删除的好友存在
    {
        return;
    }
    _umap_roleSock::iterator iter = roleSock->find(roleid);
    if(iter != roleSock->end()) //要删除的好友在线,从其好友列表里删除
    {
        umap_friendList delete_friendList = (*smap)[iter->second].m_friendList;
        _umap_friendList::iterator delete_it = delete_friendList->find((*smap)[conn].m_roleid);
        if(delete_it != delete_friendList->end())
        {
            delete_friendList->erase(delete_it); //从好友列表中删除自己
        }

        STR_PackDeleteFriend t_delFriend;
        t_delFriend.RoleID = (*smap)[conn].m_roleid;
        iter->second->Write_all(&t_delFriend, sizeof(STR_PackDeleteFriend));//给好友发送删除包
    }
    //从数据库删除
    StringBuilder sbd;
    sbd << "delete from t_friendlist where roleid = " << roleid << " and friendroleid = " << (*smap)[conn].m_roleid << ";";
    Logger::GetLogger()->Debug(sbd.str());
    Server *srv = Server::GetInstance();
    hf_int32 t_row = srv->getDiskDB()->Set(sbd.str());
    if(t_row == 1)
    {
        Logger::GetLogger()->Debug("delete success");
    }

    //从好友列表里删除
    friendList->erase(it);
    //从数据库中删除
    sbd.Clear();
    sbd << "delete from t_friendlist where roleid = " << (*smap)[conn].m_roleid << " and friendroleid = " << roleid << ";";
    Logger::GetLogger()->Debug(sbd.str());
    t_row = srv->getDiskDB()->Set(sbd.str());
    if(t_row == 1)
    {
        Logger::GetLogger()->Debug("delete  friend success");
    }
}
Esempio n. 9
0
//玩家上线,发送离线的添加好友请求
 void TeamFriend::SendAskAddFriend(TCPConnection::Pointer conn)
 {
     SessionMgr::SessionPointer smap = SessionMgr::Instance()->GetSession();
     hf_uint32 roleid = (*smap)[conn].m_roleid;
     StringBuilder sbd;
     sbd << "select requestroleid,requestnick from t_addFriend where addroleid = " << roleid << ";";
     Logger::GetLogger()->Debug(sbd.str());

     Server* srv = Server::GetInstance();
     vector<STR_AddFriend> addFriend;
     hf_int32 t_row = srv->getDiskDB()->GetAskAddFriend(addFriend, sbd.str());
     if(t_row > 0)
     {
         hf_char* buff = (hf_char*)srv->malloc();
         STR_PackHead t_packHead;
         t_packHead.Flag = FLAG_AddFriend;
         t_packHead.Len = t_row*sizeof(STR_AddFriend);
         hf_int32 i = 0;
         for(vector<STR_AddFriend>::iterator it = addFriend.begin(); it != addFriend.end(); it++)
         {
             memcpy(buff + sizeof(STR_PackHead) + i*sizeof(STR_AddFriend),&(*it), sizeof(STR_AddFriend));
             i++;
         }
         memcpy(buff, &t_packHead, sizeof(STR_PackHead));
         conn->Write_all(buff,t_packHead.Len + sizeof(STR_PackHead));

         srv->free(buff);

         //删除保存的离线添加请求
         sbd.Clear();
         sbd << "delete from t_addFriend where addroleid = " << roleid << ";";
         Logger::GetLogger()->Debug(sbd.str());
         t_row = srv->getDiskDB()->Set(sbd.str());
         if(t_row == 1)
         {
             Logger::GetLogger()->Debug("delete asd addfriend success");
         }
     }
 }
Esempio n. 10
0
void TeamFriend::addFriend(TCPConnection::Pointer conn, STR_PackAddFriend* addFriend)
{
    Server* srv = Server::GetInstance();

    STR_PackAddFriend t_addFriend;
    SessionMgr::SessionPointer smap = SessionMgr::Instance()->GetSession();
    t_addFriend.RoleID = (*smap)[conn].m_roleid;
    memcpy(t_addFriend.Nick, ((*smap)[conn].m_RoleBaseInfo.Nick), 32);

    if(addFriend->RoleID >= 100000000) //按roleID添加好友(优先)
    {
        umap_roleSock roleSock = SessionMgr::Instance()->GetRoleSock();
        _umap_roleSock::iterator it = roleSock->find(addFriend->RoleID);
        if(it != roleSock->end()) //要添加的好友在线
        {
            it->second->Write_all(&t_addFriend, sizeof(STR_PackAddFriend));
        }
        if(it == roleSock->end()) //玩家不在线
        {
            StringBuilder sbd;
            sbd << "insert into t_addFriend values(" << t_addFriend.RoleID << ",'" << t_addFriend.Nick << "'," << addFriend->RoleID << ");";
            Logger::GetLogger()->Debug(sbd.str());
            if(srv->getDiskDB()->Set(sbd.str()) == -1)
            {
                Logger::GetLogger()->Error("insert add role friend error");
            }
        }
    }
    else  //按昵称添加好友
    {
         SessionMgr::umap_nickSock nickSock = SessionMgr::Instance()->GetNickSock();
         SessionMgr::_umap_nickSock::iterator it = nickSock->find(addFriend->Nick);
         if(it != nickSock->end()) //在线
         {
             it->second->Write_all(&t_addFriend, sizeof(STR_PackAddFriend));
         }
         else //添加的好友不在线
         {
             hf_char nickbuff[40] = { 0 };
             memcpy(nickbuff, addFriend->Nick, sizeof(addFriend->Nick));
             //在数据库中查找昵称是否存在
             StringBuilder sbd;
             sbd << "select roleid from t_playerrolelist where nick = '" << nickbuff << "';";
             Logger::GetLogger()->Debug(sbd.str());
             hf_uint32 addroleid = 0;
             hf_int32 t_row = srv->getDiskDB()->GetNickRoleid(&addroleid, sbd.str());
             if(t_row == 1) //昵称存在,保存为离线请求
             {
                 hf_uint32 Requestroleid = (*smap)[conn].m_roleid;
                 hf_char   RequestNick[40] = { 0 };
                 memcpy(RequestNick, (*smap)[conn].m_RoleBaseInfo.Nick, 32);
                 sbd.Clear();
                 sbd << "insert into t_addFriend values(" << Requestroleid << ",'" << RequestNick << "'," << addroleid << ");";
                 Logger::GetLogger()->Debug(sbd.str());
                 t_row = srv->getDiskDB()->Set(sbd.str());
                 if( t_row == -1)
                 {
                     Logger::GetLogger()->Error("insert add friend error");
                 }
             }
             else if(t_row == 0) //昵称不存在
             {
                 STR_PackAddFriendReturn Raddfriend;

                 memcpy(Raddfriend.Nick, addFriend->Nick, 32);
                 Raddfriend.value = 3;
                 conn->Write_all(&Raddfriend, sizeof(STR_PackAddFriendReturn));
             }
         }
    }
    srv->free(addFriend);
}
Esempio n. 11
0
//接收到客户端添加好友的回复
void TeamFriend::ReciveAddFriend(TCPConnection::Pointer conn, STR_PackAddFriendReturn* addFriend)
{
    Server* srv = Server::GetInstance();
    SessionMgr::SessionPointer smap = SessionMgr::Instance()->GetSession();
    umap_roleSock roleSock = SessionMgr::Instance()->GetRoleSock();
    if(addFriend->value == 1) //同意添加
    {
        StringBuilder sbd;
        //将要添加的好友写入到该好友列表中
        sbd << "insert into t_friendlist values(" << addFriend->RoleID << "," << (*smap)[conn].m_roleid << ");";
        Logger::GetLogger()->Debug(sbd.str());
        hf_int32 t_row = srv->getDiskDB()->Set(sbd.str());
        if(t_row == -1)
        {
            Logger::GetLogger()->Error("insert add friendlist error");
        }

        //将该好友添加到要添加的好友列表中
        sbd.Clear();
        sbd << "insert into t_friendlist values(" << (*smap)[conn].m_roleid << "," << addFriend->RoleID<< ");";
        Logger::GetLogger()->Debug(sbd.str());
        t_row = srv->getDiskDB()->Set(sbd.str());
        if(t_row == -1)
        {
            Logger::GetLogger()->Error("insert add friendlist error");
        }

        _umap_roleSock::iterator it = roleSock->find(addFriend->RoleID);
        if(it != roleSock->end()) //在线
        {
            //更新在线好友列表
            STR_FriendInfo t_friendInfo;
            t_friendInfo.RoleID = addFriend->RoleID;
            memcpy(t_friendInfo.Nick, addFriend->Nick, 32);
            t_friendInfo.Status = 1;

            umap_friendList friendList = (*smap)[conn].m_friendList;
            (*friendList)[addFriend->RoleID] = t_friendInfo;

            //更新要添加的好友的在线好友列表
            t_friendInfo.RoleID = (*smap)[conn].m_roleid;
            memcpy(t_friendInfo.Nick, (*smap)[conn].m_RoleBaseInfo.Nick, 32);

            friendList = (*smap)[it->second].m_friendList;
            (*friendList)[(*smap)[conn].m_roleid] = t_friendInfo;


            //发送添加好友返回数据包
            addFriend->RoleID = (*smap)[conn].m_roleid;
            memcpy(addFriend->Nick, (*smap)[conn].m_RoleBaseInfo.Nick, 32);
            it->second->Write_all(addFriend, sizeof(STR_PackAddFriend));
        }
    }
    else //不同意
    {
        _umap_roleSock::iterator it = roleSock->find(addFriend->RoleID);
        if(it != roleSock->end()) //在线
        {
            addFriend->RoleID = (*smap)[conn].m_roleid;
            memcpy(addFriend->Nick, (*smap)[conn].m_RoleBaseInfo.Nick, 32);
            it->second->Write_all(addFriend, sizeof(STR_PackAddFriendReturn));
        }
    }
    srv->free(addFriend);
}
Esempio n. 12
0
	bool MetaLexer::ParseLexProfile(const CoreLib::String & lex)
	{
		LinkedList<LexProfileToken> tokens;
		int ptr = 0;
		int state = 0;
		StringBuilder curToken;
		while (ptr < lex.Length())
		{
			wchar_t curChar = lex[ptr];
			wchar_t nextChar = 0;
			if (ptr+1<lex.Length())
				nextChar = lex[ptr+1];
			switch (state)
			{
			case 0:
				{
					if (IsLetter(curChar))
						state = 1;
					else if (IsWhiteSpace(curChar))
						ptr ++;
					else if (curChar == L'{')
					{
						state = 2;
						ptr ++;
					}
					else if (curChar == L'=')
						state = 3;
					else if (curChar == L'/' && nextChar == L'/')
						state = 4;
					else
					{
						LexerError err;
						err.Position = ptr;
						err.Text = String(L"[Profile Error] Illegal character \'") + curChar + L"\'";
						Errors.Add(err);
						ptr ++;
					}
					curToken.Clear();
				}
				break;
			case 1:
				{
					if (IsIdent(curChar))
					{
						curToken.Append(curChar);
						ptr ++;
					}
					else
					{
						LexProfileToken tk;
						tk.str = curToken.ToString();
						tk.type = LexProfileToken::Identifier;
						tokens.AddLast(tk);
						state = 0;
					}
				}
				break;
			case 2:
				{
					if (curChar == L'}' && (nextChar == L'\r' || nextChar == L'\n' || nextChar == 0) )
					{
						LexProfileToken tk;
						tk.str = curToken.ToString();
						tk.type = LexProfileToken::Regex;
						tokens.AddLast(tk);
						ptr ++;
						state = 0;
					}
					else
					{
						curToken.Append(curChar);
						ptr ++;
					}
				}
				break;
			case 3:
				{
					LexProfileToken tk;
					tk.str = curChar;
					tk.type = LexProfileToken::Equal;
					tokens.AddLast(tk);
					ptr ++;
					state = 0;
				}
				break;
			case 4:
				{
					if (curChar == L'\n')
						state = 0;
					else
						ptr ++;
				}
			}
		}

		// Parse tokens
		LinkedNode<LexProfileToken> * l = tokens.FirstNode();
		state = 0;
		String curName, curRegex;
		try
		{
			TokenNames.Clear();
			Regex.Clear();
			while (l)
			{
				curName = ReadProfileToken(l, LexProfileToken::Identifier);
				l = l->GetNext();
				ReadProfileToken(l, LexProfileToken::Equal);
				l = l->GetNext();
				curRegex = ReadProfileToken(l, LexProfileToken::Regex);
				l = l->GetNext();
				TokenNames.Add(curName);
				Regex.Add(curRegex);
				if (curName[0] == L'#')
					Ignore.Add(true);
				else
					Ignore.Add(false);
			}
		}
		catch(int)
		{
			return false;
		}
		return true;
	}