Exemplo n.º 1
0
/** 
 * 关闭游戏窗口
 *
 * @return 如果要真的关闭游戏窗口返回真,否则返回假
 */
bool CMole2dGameFrameDlg::CloseMyGameFrame(void)
{
	CMolGUIRoomList *pGameList = GetRoomList();
	if(pGameList == NULL) return false;

	Player *mySelfPlayer = pGameList->IsExistPlayer(pGameList->GetMySelfID());
	if(mySelfPlayer == NULL) return false;

	CMolGUIRoom *pGameRoom = pGameList->GetGameRoomByIndex(mySelfPlayer->GetRoomId());
	if(pGameRoom == NULL)
	{
		return true;
	}

	if(pGameRoom->GetRoomState() == ROOMSTATE_GAMING && !mySelfPlayer->IsLookOn())
	{
		PostMessage(IDD_GAMEFRAM_MESSAGEBOX,1,0);
	}
	else if(mySelfPlayer->IsLookOn() || pGameRoom->GetRoomState() == ROOMSTATE_NORMAL)
	{
		PostMessage(IDD_GAMEFRAM_MESSAGEBOX,2,0);
	}

	return false;
}
Exemplo n.º 2
0
/** 
 * 得到玩家的数据
 */
Player* CMole2dGameFrameDlg::GetMySelf(void)
{
	CMolGUIRoomList *pGameList = GetRoomList();
	if(pGameList == NULL) return NULL;

	Player *myselfInfo = pGameList->IsExistPlayer(pGameList->GetMySelfID());
	if(myselfInfo == NULL) return NULL;

	return myselfInfo;
}
Exemplo n.º 3
0
/** 
 * 重置所有的数据
 */
void CMole2dGameFrameDlg::Reset(void)
{
	m_curGameID = -1;

	CMolGUIRoomList *pGameList = GetRoomList();
	if(pGameList != NULL) 
	{
		Player *mySelfPlayer = pGameList->IsExistPlayer(pGameList->GetMySelfID());
		if(mySelfPlayer) 
			CMole2dGameClientDlg::getSingleton().SetMySelfInfo(mySelfPlayer);

		pGameList->Clear();
	}
}
Exemplo n.º 4
0
/** 
 * 处理更新用户信息
 *
 * @param mes 要处理的网络消息
 */
void CMole2dGameFrameDlg::OnProcessUpdateUserInfoMes(CMolMessageIn &mes)
{
	if(mes.getLength() <= 0) return;

	int state = mes.readShort();

	switch(state)
	{
	case IDD_MESSAGE_GET_SUCCESS:
		{	
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			unsigned int pPlayerId = mes.readLong();

			// 首先检查服务器中是否有这个玩家
			Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
			if(pPlayer == NULL) return;

			pPlayer->SetUserAvatar(mes.readString());
			pPlayer->SetLevel(mes.readShort());
			pPlayer->SetMoney(mes.readDouble());
			pPlayer->SetExperience(mes.readLong());			
			pPlayer->SetTotalBureau(mes.readShort());
			pPlayer->SetSuccessBureau(mes.readShort());
			pPlayer->SetFailBureau(mes.readShort());
			pPlayer->SetSuccessRate(mes.readFloat());
			pPlayer->SetRunawayrate(mes.readFloat());
		}
		break;
	case IDD_MESSAGE_GET_FAIL:
		{

		}
		break;
	default:
		break;
	}
}
Exemplo n.º 5
0
/** 
 * 用于处理接收到的事件
 *
 * @param event 要处理的本地游戏事件
 *
 * @return 如果事件处理成功返回真,否则返回假
 */
bool CMole2dGameFrameDlg::OnProcessEvent(const CMolEvent& event)
{
	switch(event.mEventType)
	{
	case MOLET_GUI_EVENT:                               // GUI事件
		{
			switch(event.mGuiEvent.EventType)
			{
			case MOLGET_ELEMENT_SELECTED:               // 控件被选中
				{
					int eventid = event.mGuiEvent.Caller->GetID();

					if(eventid == MOLE2D_GUI_ROOM_LIST)
					{
						CMolGUIRoomList *pRooList = static_cast<CMolGUIRoomList*>(event.mGuiEvent.Caller);
						if(pRooList)
						{
							if(!pRooList->isQueueEnterRoom())
							{
								CMolGUIRoom *pRoom = pRooList->GetGameRoomSelected();
								if(pRoom == NULL) return CMolBaseFrame::OnProcessEvent(event);

								// 如果这桌还没有开始游戏,那么进入游戏桌
								if(pRoom->GetRoomState() != ROOMSTATE_GAMING &&
									pRooList->GetGameRoomChairSelected()->m_player == NULL)
								{
									Player *myselfInfo = GetMySelf();
									if(myselfInfo == NULL) return true;

									if(myselfInfo->GetMoney() < CMole2dGameClientDlg::getSingleton().GetCurrentGameServer()->lastMoney)
									{
										PostMessage(IDD_GAMEFRAM_MESSAGEBOX,3,0);
										return true;
									}

									CMolMessageOut out(IDD_MESSAGE_FRAME);
									out.writeShort(IDD_MESSAGE_ENTER_ROOM);
									out.writeShort(pRooList->GetGameRoomIndexSelected());
									out.writeShort(pRooList->GetGameChairIndexSelected());
									Send(out);
								}
								else if(pRoom->GetRoomState() == ROOMSTATE_GAMING &&
									pRooList->GetGameRoomChairSelected()->m_player != NULL)
								{
									// 旁观进入
									CMolMessageOut out(IDD_MESSAGE_FRAME);
									out.writeShort(IDD_MESSAGE_LOOKON_ENTER_ROOM);
									out.writeShort(pRooList->GetGameRoomIndexSelected());
									out.writeShort(pRooList->GetGameChairIndexSelected());
									Send(out);
								}
							}
							else
							{
								Player *myselfInfo = GetMySelf();
								if(myselfInfo == NULL) return true;

								if(myselfInfo->GetMoney() < CMole2dGameClientDlg::getSingleton().GetCurrentGameServer()->lastMoney)
								{
									PostMessage(IDD_GAMEFRAM_MESSAGEBOX,3,0);
									return true;
								}

								CMolMessageOut out(IDD_MESSAGE_FRAME);
								out.writeShort(IDD_MESSAGE_ENTER_ROOM);
								out.writeShort(-1);
								out.writeShort(-1);
								Send(out);
							}
						}
					}
				}
				break;
			case MOLGET_BUTTON_CLICKED:                 // 按钮点击事件
				{
					int eventid = event.mGuiEvent.Caller->GetID();

					if(eventid == MOLE2D_GUI_MIN_FRAME)
					{
						MinGameFrame();
					}
					else if(eventid == IDD_MAINFRAME_HOMEPAGE)
					{
						CMolGUIRoomList *pGameList = GetRoomList();
						if(pGameList == NULL) return false;

						pGameList->Home();
					}
					else if(eventid == IDD_MAINFRAME_LASTPAGE)
					{
						CMolGUIRoomList *pGameList = GetRoomList();
						if(pGameList == NULL) return false;

						pGameList->PageUp();
					}
					else if(eventid == IDD_MAINFRAME_NEXTPAGE)
					{
						CMolGUIRoomList *pGameList = GetRoomList();
						if(pGameList == NULL) return false;

						pGameList->PageDown();
					}
					else if(eventid == IDD_MAINFRAME_TAILPAGE)
					{
						CMolGUIRoomList *pGameList = GetRoomList();
						if(pGameList == NULL) return false;

						pGameList->End();
					}
					else if(eventid == IDD_MAINFRAME_AUTOJOIN)
					{
						CMolGUIRoomList *pGameList = GetRoomList();
						if(pGameList == NULL) return false;

						Player *mySelfPlayer = pGameList->IsExistPlayer(pGameList->GetMySelfID());
						if(mySelfPlayer == NULL) return false;

						pGameList->AutoJoin(mySelfPlayer->GetID());
					}
					else if(eventid == MOLE2D_GUI_CLOSE_CONTAINER)
					{
						if(CloseMyGameFrame())
						{
							Reset();
							ShowWindow(SW_HIDE);
							CloseConnect();

							CMole2dGameClientDlg::getSingleton().RefreshMyselfInfo();
							CMole2dGameClientDlg::getSingleton().ShowMainFrame();
							//EnableWindow(FALSE);
							//pSwitchUserDlg.ShowWindow(SW_SHOW);
							return false;
						}

						return true;
					}
				}
				break;

			default:
				break;
			}
		}
		break;
	default:
		break;
	}

	return CMolBaseFrame::OnProcessEvent(event);
}
Exemplo n.º 6
0
/// 先处理游戏框架消息
void CMole2dGameFrameDlg::OnProcessFrameMes(CMolMessageIn &mes)
{
	switch(mes.readShort())
	{
	case IDD_MESSAGE_GET_ONLINE_PLAYERS:             // 得到当前在线玩家列表
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			int pPlayerCount = mes.readShort();
			m_totalOnlinePlayers+=pPlayerCount;			

			for(int index = 0;index < pPlayerCount;index++)
			{
				unsigned int pPlayerId = mes.readLong();

				// 首先检查服务器中是否有这个玩家
				Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
				if(pPlayer == NULL)
				{			
					pPlayer = new Player(pPlayerId);				
					pGameList->AddGamePlayer(pPlayer);	
				}
				
				pPlayer->SetState((PlayerState)mes.readByte());
				pPlayer->SetType((PlayerType)mes.readByte());
				pPlayer->SetRoomId(mes.readShort());
				pPlayer->SetRoomIndex(mes.readShort());
				pPlayer->SetName(mes.readString());
				pPlayer->SetUserAvatar(mes.readString());
				pPlayer->SetLevel(mes.readShort());
				pPlayer->SetMoney(mes.readDouble());
				pPlayer->SetExperience(mes.readLong());			
				pPlayer->SetTotalBureau(mes.readShort());
				pPlayer->SetSuccessBureau(mes.readShort());
				pPlayer->SetFailBureau(mes.readShort());
				pPlayer->SetSuccessRate(mes.readFloat());
				pPlayer->SetRunawayrate(mes.readFloat());
			}
		}
		break;
	case IDD_MESSAGE_GET_ONLINE_PLAYERS_END:         // 接收在线玩家结束
		{
			CMole2dGameClientDlg::getSingleton().SetCurServerOnlinePlayers(m_totalOnlinePlayers);
			m_totalOnlinePlayers = 0;
			AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,2,0);

			// 获取房间列表
			CMolMessageOut out(IDD_MESSAGE_FRAME);
			out.writeShort(IDD_MESSAGE_GET_ROOM_LIST);
			Send(out);		
		}
		break;
	case IDD_MESSAGE_GET_ROOM_LIST:                  // 得到当前服务器中房间列表
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			int roomCount = mes.readShort();
			m_curGameID = mes.readLong();	
			CMolRoomType pRoomType = (CMolRoomType)mes.readByte();
			bool m_isQueue = mes.readByte() > 0 ? true : false;
			int pRoomPlayerCount = mes.readShort();

			pGameList->SetRoomType(pRoomType);
			pGameList->SetChairCount(pRoomPlayerCount);
			
			// 如果房间数量只有一的话,只能排队进入
			if(roomCount == 1)
			{
				pGameList->SetQueueEnterRoom(true);
				
				CString imgDir;
				imgDir.Format("%s\\gameroomconfig\\bg_%d.png",GetProgressDirection().c_str(),m_curGameID);				
				pGameList->LoadOneTableImage(imgDir.GetBuffer());
			}
			else
			{
				pGameList->SetQueueEnterRoom(m_isQueue);
			}

			// 生成指定个数的房间
			pGameList->SetGameRoom(roomCount);

			for(int index=0;index<roomCount;index++)
			{
				CMolRoomState pRoomState = (CMolRoomState)mes.readByte();
				int pRoomRealPlayerCount = mes.readShort();

				CMolGUIRoom *pGameRoom = pGameList->GetGameRoomByIndex(index);
				if(pGameRoom == NULL) continue;

				pGameRoom->SetRoomState(pRoomState);

				for(int k=0;k<pRoomRealPlayerCount;k++)
				{
					unsigned int pPlayerId = mes.readLong();
					int pRoomIndex = mes.readShort();
					int pChairIndex = mes.readShort();

					pGameList->SetGamePlayerSeat(pPlayerId,pRoomIndex,pChairIndex);	
				}
			}

			AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,0,0);
			CMole2dGameClientDlg::getSingleton().ShowWindow(SW_HIDE);

			// 先显示大厅界面
			CString mainframeDir;
			mainframeDir.Format("%s\\gameroomconfig\\gameroomlistconfig.gui",GetProgressDirection().c_str());
			LoadGUIConfig(mainframeDir);
			ShowWindow(SW_RESTORE);
		
			// 如果用户处于断线状态下,那么就直接进入游戏
			Player *pPlayer = pGameList->IsExistPlayer(pGameList->GetMySelfID());
			if(pPlayer == NULL) return;
			
			if(pPlayer->GetState() == PLAYERSTATE_LOSTLINE)
			{
				pGameList->SetVisible(FALSE);
				
				// 转换到游戏脚本目录下
				CString gameDir;
				gameDir.Format("%s\\%d",GetProgressDirection().c_str(),m_curGameID);
				ChangePlayerWorkingDir(gameDir.GetBuffer());
				
				pPlayer->SetState(PLAYERSTATE_GAMING);
				
				// 向服务器请求重新回到房间
				CMolMessageOut out(IDD_MESSAGE_FRAME);
				out.writeShort(IDD_MESSAGE_REENTER_ROOM);
				Send(out);			
			}
		}
		break;
	case IDD_MESSAGE_ENTER_ROOM:                      // 进入游戏房间
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			switch(mes.readShort())
			{
			case IDD_MESSAGE_ENTER_ROOM_SUCC:
				{
					unsigned int pPlayerId = mes.readLong();
					int pRoomIndex = mes.readShort();
					int pChairIndex = mes.readShort();

					pGameList->SetGamePlayerSeat(pPlayerId,pRoomIndex,pChairIndex);						

					if(pGameList->GetMySelfID() == pPlayerId && pGameList->isVisible())
					{
						pGameList->SetVisible(FALSE);

						// 转换到游戏脚本目录下
						CString gameDir;
						gameDir.Format("%s\\%d",GetProgressDirection().c_str(),m_curGameID);
						ChangePlayerWorkingDir(gameDir.GetBuffer());
					}

					// 调用游戏脚本
					OnProcessEnterRoomMsg(GetUserChairID(pPlayerId),mes);
				}
				break;
			case IDD_MESSAGE_ENTER_ROOM_FAIL:
				{

				}
				break;
			case IDD_MESSAGE_ENTER_ROOM_LASTMONEY:
				{
					MMessageBox("当前你身上的金币不能满足房间最低要求,请重新充值!","进入房间错误",MB_OK,this);
				}
				break;
			default:
				break;
			}
		}
		break;
	case IDD_MESSAGE_LOOKON_ENTER_ROOM:             // 旁观进入游戏房间
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			switch(mes.readShort())
			{
			case IDD_MESSAGE_ENTER_ROOM_SUCC:
				{	
					unsigned int pPlayerId = mes.readLong();
					int pRoomIndex = mes.readShort();
					int pChairIndex = mes.readShort();

					// 如果是旁观用户的话,不用处理
					Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
					if(pPlayer == NULL) return;	

					pPlayer->SetLookOn(true);
					pPlayer->SetRoomId(pRoomIndex);
					pPlayer->SetRoomIndex(pChairIndex);
					//pGameList->SetGamePlayerSeat(pPlayerId,pRoomIndex,pChairIndex);	

					if(pGameList->GetMySelfID() == pPlayerId)
					{
						pGameList->SetVisible(FALSE);

						// 转换到游戏脚本目录下
						CString gameDir;
						gameDir.Format("%s\\%d",GetProgressDirection().c_str(),m_curGameID);
						ChangePlayerWorkingDir(gameDir.GetBuffer());
					}

					// 调用游戏脚本
					OnProcessEnterRoomMsg(GetUserChairID(pPlayerId),mes);
				}
				break;
			case IDD_MESSAGE_ENTER_ROOM_FAIL:
				{

				}
				break;
			default:
				break;
			}
		}
		break;
	case IDD_MESSAGE_LEAVE_ROOM:                    // 离开游戏房间
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			unsigned int pPlayerId = mes.readLong();

			Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
			if(pPlayer == NULL) return;	

			pPlayer->SetState(PLAYERSTATE_NORAML);
			pPlayer->SetRoomId(-1);
			pPlayer->SetRoomIndex(-1);

			// 如果是旁观用户的话,不用处理
			if(pPlayer->IsLookOn()) 
			{
				pPlayer->SetLookOn(false);
			}
			else
			{
				// 调用游戏脚本
				int state = GetUserChairID(pPlayerId);
				if(state != -1)
					OnProcessLeaveRoomMsg(state,mes);

				pGameList->ClearChairByPlayerID(pPlayerId);			
			}				
		}
		break;
	case IDD_MESSAGE_LEAVE_SERVER:              // 离开游戏服务器
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			unsigned int pPlayerId = mes.readLong();
			
			pGameList->ClearChairByPlayerID(pPlayerId);		
			pGameList->DeletePlayer(pPlayerId);		
		}
		break;
	case IDD_MESSAGE_REENTER_ROOM:                  // 断线后重新回到房间
		{
			unsigned int pPlayerId = mes.readLong();	

			// 断线后重回
			OnProcessDisconnectBackNetMes(GetUserChairID(pPlayerId),mes);
		}
		break;
	case IDD_MESSAGE_FALLLINE_ROOM:                 // 用户断线
		{
			unsigned int pPlayerId = mes.readLong();	

			// 断线
			OnProcessDisconnectNetMes(GetUserChairID(pPlayerId),mes);
		}
		break;
	case IDD_MESSAGE_READY_START:                   // 用户准备开始游戏
		{
			unsigned int pPlayerId = mes.readLong();

			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
			if(pPlayer == NULL) return;

			pPlayer->SetState(PLAYERSTATE_READY);

			//用户准备消息
			OnProcessPlayerReadyMes(GetUserChairID(pPlayerId));
		}
		break;
	case IDD_MESSAGE_GAME_START:                    // 房间已经开始游戏
		{
			unsigned int pRoomId = mes.readLong();

			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			CMolGUIRoom *pRoom = pGameList->GetGameRoomByIndex(pRoomId);
			if(pRoom == NULL) return;

			pRoom->SetRoomState(ROOMSTATE_GAMING);
		}
		break;
	case IDD_MESSAGE_GAME_END:                      // 房间已经结束游戏
		{
			unsigned int pRoomId = mes.readLong();

			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			CMolGUIRoom *pRoom = pGameList->GetGameRoomByIndex(pRoomId);
			if(pRoom == NULL) return;

			pRoom->SetRoomState(ROOMSTATE_NORMAL);
		}
		break;
	default:
		break;
	}
}
Exemplo n.º 7
0
/** 
 * 处理用户登录系统消息
 *
 * @param mes 接收到要处理的网络消息
 */
void CMole2dGameFrameDlg::OnProcessUserLoginMes(CMolMessageIn &mes)
{
	switch(mes.readShort())
	{
	case IDD_MESSAGE_GAME_LOGIN_SUCESS:
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			if(pGameList->GetMySelfID() != -1)
			{
				unsigned int pPlayerId = mes.readLong();

				// 首先检查服务器中是否有这个玩家
				Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
				if(pPlayer == NULL)
				{
					pPlayer = new Player(pPlayerId);
					pPlayer->SetState((PlayerState)mes.readByte());
					pPlayer->SetType((PlayerType)mes.readByte());
					pPlayer->SetRoomId(mes.readShort());
					pPlayer->SetRoomIndex(mes.readShort());
					pPlayer->SetName(mes.readString());
					pPlayer->SetUserAvatar(mes.readString());
					pPlayer->SetLevel(mes.readShort());
					pPlayer->SetMoney(mes.readDouble());
					pPlayer->SetExperience(mes.readLong());			
					pPlayer->SetTotalBureau(mes.readShort());
					pPlayer->SetSuccessBureau(mes.readShort());
					pPlayer->SetFailBureau(mes.readShort());
					pPlayer->SetSuccessRate(mes.readFloat());
					pPlayer->SetRunawayrate(mes.readFloat());

					pGameList->AddGamePlayer(pPlayer);	
				}	

				if(pPlayerId == pGameList->GetMySelfID())
				{
					m_revPlayerCount = 0;

					// 获取在线玩家列表
					CMolMessageOut out(IDD_MESSAGE_FRAME);
					out.writeShort(IDD_MESSAGE_GET_ONLINE_PLAYERS);
					Send(out);

					AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,1,0);
				}
			}
			else
			{
				//// 先清空原来的数据
				//pGameList->Clear();

				unsigned int pPlayerId = mes.readLong();

				// 首先检查服务器中是否有这个玩家
				Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
				if(pPlayer == NULL)
				{
					pPlayer = new Player(pPlayerId);
					pPlayer->SetState((PlayerState)mes.readByte());
					pPlayer->SetType((PlayerType)mes.readByte());
					pPlayer->SetRoomId(mes.readShort());
					pPlayer->SetRoomIndex(mes.readShort());
					pPlayer->SetName(mes.readString());
					pPlayer->SetUserAvatar(mes.readString());
					pPlayer->SetLevel(mes.readShort());
					pPlayer->SetMoney(mes.readDouble());
					pPlayer->SetExperience(mes.readLong());			
					pPlayer->SetTotalBureau(mes.readShort());
					pPlayer->SetSuccessBureau(mes.readShort());
					pPlayer->SetFailBureau(mes.readShort());
					pPlayer->SetSuccessRate(mes.readFloat());
					pPlayer->SetRunawayrate(mes.readFloat());

					if(pGameList->GetMySelfID() == -1)
					{
						pGameList->SetMySelfID(pPlayer->GetID());
					}

					pGameList->AddGamePlayer(pPlayer);	
				}	

				m_revPlayerCount = 0;

				// 获取在线玩家列表
				CMolMessageOut out(IDD_MESSAGE_FRAME);
				out.writeShort(IDD_MESSAGE_GET_ONLINE_PLAYERS);
				Send(out);

				AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,1,0);
			}
		}
		break;
	case IDD_MESSAGE_GAME_LOGIN_FAIL:
		{
			MMessageBox("游戏服务器登陆失败,请检查您的账户和密码。","登陆出错!",MB_OK);
			AfxGetMainWnd()->SendMessage(IDM_GAMEFRAME_MESSAGE,IDD_MESSAGE_GAME_LOGIN_FAIL,0);
			CloseConnect();
		}
		break;
	case IDD_MESSAGE_GAME_LOGIN_FULL:
		{
			MMessageBox("游戏服务器已满,请选择其它游戏服务器进入。","登陆出错!",MB_OK);
			AfxGetMainWnd()->SendMessage(IDM_GAMEFRAME_MESSAGE,IDD_MESSAGE_GAME_LOGIN_FULL,0);
			CloseConnect();
		}
		break;
	case IDD_MESSAGE_GAME_LOGIN_EXIST:
		{
			MMessageBox("当前您已经在游戏服务器中,不能重复登陆。","登陆出错!",MB_OK);
			AfxGetMainWnd()->SendMessage(IDM_GAMEFRAME_MESSAGE,IDD_MESSAGE_GAME_LOGIN_EXIST,0);
			CloseConnect();
		}
		break;
	default:
		break;
	}
}
Exemplo n.º 8
0
/** 
 * 处理用户登录中心服务器消息
 *
 * @param mes 接收到要处理的网络消息
 */
void CMole2dGameFrameDlg::OnProcessUserCenterMes(CMolMessageIn &mes)
{
	switch(mes.readShort())
	{
	case IDD_MESSAGE_CENTER_LOGIN_SUCESS:
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return;

			//int MyPlayerId = pGameList->GetMySelfID();

			//if(MyPlayerId == -1)
			//{
				unsigned int pPlayerId = mes.readLong();

				// 首先检查服务器中是否有这个玩家
				Player *pPlayer = pGameList->IsExistPlayer(pPlayerId);
				if(pPlayer == NULL)
				{
					pPlayer = new Player(pPlayerId);
					//pPlayer->SetState((PlayerState)mes.readByte());
					//pPlayer->SetType((PlayerType)mes.readByte());
					//pPlayer->SetRoomId(mes.readShort());
					//pPlayer->SetRoomIndex(mes.readShort());
					pPlayer->SetName(mes.readString());
					pPlayer->SetUserAvatar(mes.readString());
					pPlayer->SetLevel(mes.readShort());
					pPlayer->SetMoney(mes.readDouble());
					pPlayer->SetExperience(mes.readLong());			
					pPlayer->SetTotalBureau(mes.readShort());
					pPlayer->SetSuccessBureau(mes.readShort());
					pPlayer->SetFailBureau(mes.readShort());
					pPlayer->SetSuccessRate(mes.readFloat());
					pPlayer->SetRunawayrate(mes.readFloat());

					pGameList->AddGamePlayer(pPlayer);	
				}	

				if(pGameList->GetMySelfID() == -1)
				{
					pGameList->SetMySelfID(pPlayer->GetID());

					CMole2dGameClientDlg::getSingleton().SetMySelfInfo(pPlayer);
				}

				CMole2dGameClientDlg::getSingleton().RefreshMyselfInfo();
			//}

			// 获取在线玩家列表
			CMolMessageOut out(IDD_MESSAGE_GET_GAMESERVER);
			Send(out);

			AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,4,0);			
		}
		break;
	case IDD_MESSAGE_CENTER_LOGIN_FAIL:
		{
			MMessageBox("中心服务器登陆失败,请检查您的账户和密码。","登陆出错!",MB_OK);
			AfxGetMainWnd()->SendMessage(IDM_GAMEFRAME_MESSAGE,IDD_MESSAGE_GAME_CENTER_LOGIN_FAIL,0);
			CloseConnect();
		}
		break;
	case IDD_MESSAGE_GET_GAMESERVER:
		{
			int GameServerCount = mes.readShort();

			for(int index = 0;index < GameServerCount;index++)
			{
				int GameId = mes.readLong();
				std::string ServerName = mes.readString();
				std::string ServerIp = mes.readString();
				int ServerPort = mes.readShort();
				int OnlinePlayerCount = mes.readShort();
				int lastMoney = mes.readDouble();

				CMole2dGameClientDlg::getSingleton().AddGameServer(GameServerInfo(GameId,ServerName,ServerIp,ServerPort,OnlinePlayerCount,lastMoney));
			}

			AfxGetMainWnd()->SendMessage(IDD_SHOW_CONN_TIP,0,0);

			// 登录成功后就关闭连接
			CloseConnect();

			// 如果用户选择了保存用户,就将用户名写入数据库中
			if(CMole2dGameClientDlg::getSingleton().IsRegisterPWD())
				WriteRegisterKey("MOLEUSERNAME",m_loginName);

			// 显示主窗口
			CMole2dGameClientDlg::getSingleton().ShowMainFrame();
		}
		break;
	default:
		break;
	}
}
Exemplo n.º 9
0
/// 游戏对话框消息
LRESULT CMole2dGameFrameDlg::OnGameFrameMessage(WPARAM wparam, LPARAM lparam)
{
	int type = (int)wparam;

	switch(type)
	{
	case 1:
		{
			int state = MMessageBox("当前您正在游戏中,如果强退将被扣分,您确定要退出游戏吗?","退出游戏",MB_OKCANCEL,this);
			if(state==2) return 0;

			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return false;

			DestroyScriptSystem();
			CloseAllRoomTimers();

			// 转换到大厅房间目录下
			CString gameDir;
			gameDir.Format("%s",GetProgressDirection().c_str());
			ChangePlayerWorkingDir(gameDir.GetBuffer(),false);
			LoadGUIConfig("gameroomconfig\\gameroomlistconfig.gui");

			pGameList->Reset();
			pGameList->SetVisible(TRUE);

			// 发送离开房间消息
			CMolMessageOut out(IDD_MESSAGE_FRAME);
			out.writeShort(IDD_MESSAGE_LEAVE_ROOM);
			Send(out);
		}
		break;
	case 2:
		{
			CMolGUIRoomList *pGameList = GetRoomList();
			if(pGameList == NULL) return false;

			DestroyScriptSystem();
			CloseAllRoomTimers();

			// 转换到大厅房间目录下
			CString gameDir;
			gameDir.Format("%s",GetProgressDirection().c_str());
			ChangePlayerWorkingDir(gameDir.GetBuffer(),false);
			LoadGUIConfig("gameroomconfig\\gameroomlistconfig.gui");

			pGameList->Reset();
			pGameList->SetVisible(TRUE);

			// 发送离开房间消息
			CMolMessageOut out(IDD_MESSAGE_FRAME);
			out.writeShort(IDD_MESSAGE_LEAVE_ROOM);
			Send(out);
		}
		break;
	case 3:
		{
			MMessageBox("当前你身上的金币不能满足房间最低要求,请重新充值!","进入房间错误",MB_OK,this);
		}
		break;
	default:
		break;
	}

	return 0;
}
Exemplo n.º 10
0
VOID CRoomMgr::OnGetRoomList( XMessage *pMsg )
{
    GetRoomList();
}
Exemplo n.º 11
0
Arquivo: client.c Projeto: skony/sopy
int main(){
  
  int i,j=0;
  ownMSG = OwnMSGInit();
  printf("%d \n", ownMSG);
  SERVER_LIST_RESPONSE res = GetServerList();
  
  server_id = res.servers[0];
  printf("%d\n", server_id);
  sem_login_id = SemLoginInit();
  
  int login_res, change_res;
  while((login_res = Login()) != 201)
    if(login_res == 503){
      printf("server is too busy now...\n");
      sleep(5);
    }
    else if(login_res == 400)
	printf("your name is uncorrect\n");
      else if(login_res == 409)
	  printf("this name already exists\n");
  printf("Login successful! Hello %s\n", name);
  printf("If you first time use this program it's reccomended to try /help\n");
  int pid[2];/*
  if(fork() == 0){
    pid[0] = getpid();
    while(1)
      Heartbeat();
  }
  if(fork() == 0){
    pid[1] = getpid;
    while(1)
      ReceiveText();
  }*/
  char line[MAX_MSG_SIZE];
  while(1){
    printf(">>");
    fgets(line,MAX_MSG_SIZE, stdin);
    j = 0;
    while(line[j] != '\n') j++; 
    line[j] = '\0'; 
    if(strcmp(line, "/help") == 0)
      printf("/users../gusers../priv../logout../rooms../change..\n");
    else if(strcmp(line, "/users") == 0){ 
	CLIENT_LIST_RESPONSE* res = GetClientList();
	for(i=0; i<res->active_clients; i++)
	  printf("%s\n", res->names[i]);
      }
      else if(strcmp(line, "/gusers") == 0){ 
	  CLIENT_LIST_RESPONSE* res = GetGlobalClientList();
	  for(i=0; i<res->active_clients; i++)
	    printf("%s\n", res->names[i]);
	}
	else if(strcmp(line, "/priv") == 0)
	    PrivateText();
	  else if(strcmp(line, "/logout") == 0){
	      Logout();
	      kill(pid[0], 9); kill(pid[1], 9);
	    }
	    else if(strcmp(line, "/rooms") == 0){
		ROOM_LIST_RESPONSE* res = GetRoomList();
		for(i=0; i<res->active_rooms; i++)
		  printf("%s\n", res->rooms[i].name);
	      }
	      else if( (strcmp(line, "/change") == 0) ){
		  while(ChangeRoom() != 202)
		    printf("invalid room name\n");
		  printf("room change successful\n");
		}
		else
		  PublicText(line);
  }
  
  return 0;
}