Ejemplo n.º 1
0
//设置用户信息
bool CUsingSkinClass::SetUserInfo(BYTE bViewStation, UserItemStruct * pUserItem)
{
	if (bViewStation < MAX_PEOPLE)
	{
		m_showcoredlg.UpdateUser(bViewStation,pUserItem);
		m_pUserItem[bViewStation]=pUserItem;
		m_uTime[bViewStation]=0;
		UpdateUserInfo(bViewStation);
	}
	return false;
}
Ejemplo n.º 2
0
int ClientManager::packet_move_proc(ObjectUser::User* p_user)
{
	ObjectUser *pObjectUser = FindUser(p_user->id);

	if (pObjectUser != NULL) {
		USHORT packet_header_second = Read_Stream_Header_second(*pStreamSP);
		/* TODO : get user position from data stream */
		CStream *pStream = *pStreamSP;
		int client_pos_x;
		int client_pos_y;
		int client_zone;

		int pos_x;
		int pos_y;

		pStream->ReadData(&client_pos_x);
		pStream->ReadData(&client_pos_y);
		pStream->ReadData(&client_zone);
		/* TODO : end */

		p_user->id = pObjectUser->sUser_info.id;
		p_user->zone = pObjectUser->sUser_info.zone;

		pos_x = pObjectUser->sUser_info.pos_x;
		pos_y = pObjectUser->sUser_info.pos_y;

		switch (packet_header_second)
		{
		case P_S_MOVE_ZONE:
			break;
		case P_S_MOVE_UP:
			if ((pos_y + 1) <= 255)
			{
				pObjectUser->sUser_info.pos_y++;
			}
			break;
		case P_S_MOVE_DOWN:
			if ((pos_y - 1) >= 0)
			{
				pObjectUser->sUser_info.pos_y--;
			}
			break;
		case P_S_MOVE_LEFT:
			if ((pos_x - 1) >= 0)
			{
				pObjectUser->sUser_info.pos_x--;
			}
			break;
		case P_S_MOVE_RIGHT:
			if ((pos_x + 1) <= 255)
			{
				pObjectUser->sUser_info.pos_x++;
			}
			break;
		case P_S_MOVE_RAND_TELEPORT:
			srand((unsigned int)timeGetTime());
			pObjectUser->sUser_info.pos_x = rand() % AI_MAX_POS_X;
			pObjectUser->sUser_info.pos_y = rand() % AI_MAX_POS_Y;

			break;
		case P_S_MOVE_NONE:
		default:
			break;

		}
#if 1
		DWORD writen = 0;

		BYTE buff[30];

		UpdateUserInfo(p_user->id, &pObjectUser->sUser_info);
		
		pStream->UpdateBuff(&pObjectUser->sUser_info.pos_x, 4, sizeof(pObjectUser->sUser_info.pos_x));
		pStream->UpdateBuff(&pObjectUser->sUser_info.pos_y, 8, sizeof(pObjectUser->sUser_info.pos_y));

		pObjectUser->Set_Zone( pObjectUser->myWolrd.calc_zone(pObjectUser->sUser_info.pos_x, pObjectUser->sUser_info.pos_y) );
		pStream->UpdateBuff(&pObjectUser->sUser_info.zone, 12, sizeof(pObjectUser->sUser_info.zone));

		pStream->CopyData(&buff);

		memcpy(pc_socket_info->dataBuf.buf, buff, sizeof(buff));

		/* return message by send socket */
		if (WSASend(p_user->id,
			(WSABUF*)&pc_socket_info->dataBuf,
			1,
			(DWORD *)&writen,
			0,
			&pc_socket_info->overlapped,
			NULL) == SOCKET_ERROR) {
			if (WSAGetLastError() != WSA_IO_PENDING) {
				printf("WSASend Error.. [%d] \n", WSAGetLastError());
			}
		}

		//broadcast_userinfo(p_user->id, &pObjectUser->sUser_info);
		broadcast_other_player(pObjectUser);
#endif
	}

	return true;
}
Ejemplo n.º 3
0
void TextMessageProcessor::ProcessText(mpserver::TextMessage* output_message)
{
    StorageMysqlClient mysql_client;
    const std::string& openid = m_input_message.fromusername();
    mysql_client.AddUserMessageAction(openid, m_input_message.content());
    std::string content;
    if (!ConvertUtf8ToGbk(m_input_message.content(), &content))
        content.assign(m_input_message.content());
    // swap src/dst.
    output_message->set_tousername(openid);
    output_message->set_fromusername(m_input_message.tousername());
    output_message->set_createtime(static_cast<uint32_t>(time(NULL)));
    output_message->set_msgtype("text");

    std::string resp_content;

    int ret = 0;
    int horoscope_type = GetHoroscopeTypeByText(content);
    int date_type = GetDateByText(content);

    if (horoscope_type != HoroscopeType_UnknownHoroscope) {
        
        if (content.find("绑定") != std::string::npos) {
            UpdateUserInfo(openid);
            std::string head = GetUtf8String("");
            horoscope::HoroscopeAttr horoscope_attr;
            ret = mysql_client.GetHoroscopeAttr(horoscope_type, &horoscope_attr);
            if (ret == 0) {
                head.append(horoscope_attr.zh_cn_name());
            }
            resp_content = head;

            horoscope::UserAttr userattr;

            ret = mysql_client.GetUserAttr(
                m_input_message.fromusername(), &userattr);

            userattr.set_horoscope_type(horoscope_type);
			
			std::string month = "";
			std::string day = "";
			if(GetMonthDay(content, month, day)){
				if(!month.empty() && !day.empty()) {
					if(month[0] == '0') month = month.substr(1);
					if(day[0] == '0') day = day.substr(1);
					int nMonth = 0;
					int nDay = 0;
					ParseNumber(month.c_str(), &nMonth);
					ParseNumber(day.c_str(), &nDay);
					userattr.set_birth_month(nMonth);
					userattr.set_birth_day(nDay);
				}
			} else {
				userattr.set_birth_month(0);
				userattr.set_birth_day(0);
			}
			
            //ret = redis_client.MergeUserAttr(
            //    m_input_message.fromusername(), userattr);
            ret = mysql_client.SetUserAttr(
                m_input_message.fromusername(), userattr);
            if (ret == 0) {
                resp_content.append(GetUtf8String(BIND_SUCCESS_WORDING));
            }

            // 双写到mysql
            // StorageMysqlClient& mysql_client = StorageMysqlClientSingleton::Instance();
            // int mysql_ret = mysql_client.SetUserAttr(
            //     m_input_message.fromusername(), userattr);
            // LOG(INFO)
            //     << "call StorageMysqlClient.SetUserAttr done. openid "
            //     << openid << " ret " << mysql_ret;

        } else {
            std::string mysql_content;

            if(getMysqlFortuneContent(horoscope_type, date_type, mysql_content))
            {
                resp_content = mysql_content;
            }
        }

        resp_content.append("\n\n");
        resp_content.append(GetUtf8String(INPUT_MODIFY_HOROSCOPE_WORDING));
    } 
    else {
        int uer_horoscope_type = HoroscopeType_UnknownHoroscope;

        horoscope::UserAttr userattr;
        ret = mysql_client.GetUserAttr(
        m_input_message.fromusername(), &userattr);
        if (ret == 0) {
            uer_horoscope_type = userattr.horoscope_type();
        }

        if (uer_horoscope_type != HoroscopeType_UnknownHoroscope) {
            //已经绑定过星座
            if(date_type != UnknownDate)
            {            
                std::string mysql_content;
                if(getMysqlFortuneContent(uer_horoscope_type, date_type, mysql_content))
                {
                    resp_content = mysql_content;
                }
                else
                {
                    resp_content = GetUtf8String(INPUT_UNKNOWN);
                    LOG(ERROR) << "user input unknown. [" << content << "]";
                }
            }
            else
            {
                resp_content = GetUtf8String(INPUT_UNKNOWN);
                LOG(ERROR) << "user input unknown. [" << content << "]";
            }

        }
        else
        {
            resp_content = GetUtf8String(INPUT_HOROSCOPE_WITH_BIND_WORDING);
        }


    }

    std::string user_count = UserCountStatSingleton::Instance(
        ).GetAndReportUserCount(openid);
    if (!user_count.empty()) {
        resp_content.append("\n");
        resp_content.append(GetUtf8String(user_count));
    }

    if (resp_content.empty()) {
        LOG(ERROR) << "never come here. " << m_input_message.ShortDebugString();
        resp_content = GetUtf8String(NOT_IMPLEMENT_WORDING);
    }

    output_message->set_content(resp_content);
}