⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brewhall.cpp

📁 象棋框架
💻 CPP
字号:
/*===========================================================================
FILE: BrewHall.c
===========================================================================*/
#include "BrewHall.h"
#include "brewhallcanvas2.h"
#include "brewlogincanvasbase.h"

CBrewHall::CBrewHall(){
  m_nHallRunFlag = FALSE;
  frame = NULL;
  m_pIShell = NULL;
  m_pIDi = NULL;
  m_pIHallCanvas = CreateHallCanvas();

  m_nCurCv = Canvas1;

  if (m_pIHallCanvas != NULL)
	m_pIHallCanvas->setFrame(this);
  m_pRList = NULL;
  m_pCList = NULL;
  m_pUList = NULL;
  m_nRCount = 0;
  m_nCCount = 0;
  m_nUCount = 0;
  m_pIMenu = NULL;
  m_nHallState = HALL_INIT;
  m_pCurrentRoom = NULL;
  m_nCurrentTableId = 0;
  m_nCurrentSeatId = 0;
  m_nWaitSitdownTime = 0;
  m_nWaitQueryTime = 0;
}

void CBrewHall::freeData(){
	m_pIShell = NULL;
	m_pIDi = NULL;
	
	if (m_pIMenu != NULL){
		IMENUCTL_Release(m_pIMenu);
		m_pIMenu = NULL;
	}
	if (m_pCurrentRoom != NULL){
		FREE(m_pCurrentRoom);
		m_pCurrentRoom = NULL;
	}
	if (m_pIHallCanvas != NULL){
		m_pIHallCanvas->Release();
		m_pIHallCanvas = NULL;
	}
	clearRoomList();
	clearSeatList();
	clearUserList();
}

void CBrewHall::clearUserList(){
  struct UserItemStruct *uItem;
  UINT16 i;

  for (i = 0; i < m_nUCount; i ++){
    if (m_pUList == NULL)
	  break;
	uItem = m_pUList;
	m_pUList = m_pUList->userNext;
	FREE(uItem);
  }
  m_nUCount = 0;
}

void CBrewHall::clearRoomList(){
	struct RoomItemStruct *rItem;
	UINT16 i;
	
	for (i = 0; i < m_nRCount; i ++){
		if (m_pRList == NULL)
			break;
		rItem = m_pRList;
		m_pRList = m_pRList->roomNext;
		FREE(rItem);
	}
	m_nRCount = 0;
}

void CBrewHall::clearSeatList(){
	struct SeatItemStruct *cItem;
	UINT16 i;
	
	for (i = 0; i < m_nCCount; i ++){
		if (m_pCList == NULL)
			break;
		cItem = m_pCList;
		m_pCList = m_pCList->seatNext;
		FREE(cItem);
	}
	m_nCCount = 0;
}

CBrewHall::~CBrewHall(){
  freeData();
}

void CBrewHall::setHallFrame(IBrewHallFrame *f){
  frame = f;
  if (frame != NULL){
    m_pIShell = frame->getCurrentShell();
	m_pIDi = frame->getDeviceInfo();
  }
  if (m_pIShell != NULL){
    m_nWaitSitdownTime = ISHELL_GetUpTimeMS(m_pIShell);
	m_nWaitQueryTime = m_nWaitSitdownTime;
  }
}

void CBrewHall::onGetRoomList(UINT16 gameId, UINT16 serverId, UINT16 num, struct RoomItemStruct *rItem){
  UINT16 i;
  struct RoomItemStruct *rFromItem;
  struct RoomItemStruct *rToItem;
  struct RoomItemStruct *rLastItem;

  for (i = 0; i < m_nRCount; i ++){
    rToItem = m_pRList;
	if (rToItem == NULL)
	  break;
	m_pRList = m_pRList->roomNext;
	FREE(rToItem);
  }
  m_nRCount = 0;

  rLastItem = NULL;
  rFromItem = rItem;
  for (i = 0; i < num; i ++){
	if (rFromItem == NULL)
	  break;
    rToItem = (struct RoomItemStruct *)MALLOC(sizeof(struct RoomItemStruct));
    if (rToItem == NULL)
	  break;
	m_nRCount ++;
	if (rLastItem == NULL){
	  rToItem->roomNext = NULL;
	  m_pRList = rToItem;
	}else{
	  rToItem->roomNext = rLastItem->roomNext;
	  rLastItem->roomNext = rToItem;
	}
	MEMCPY(&(rToItem->roomItem), &(rFromItem->roomItem), sizeof(struct RoomStruct));
	rLastItem = rToItem;
	rFromItem = rFromItem->roomNext;
  }
}

void CBrewHall::onEnterRoom(UINT16 gameId, UINT16 serverId, UINT8 roomId, UINT8 retCode){
	
	frame->showHint(NULL,0,HINT_TOP);
	frame->showHint(NULL,0,HINT_BOTTOM);
	if(m_nHallRunFlag != false)
	{	
		
		if(m_nCurCv == Canvas2)
		{
			CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
			p->OnReconnect();
		}
	}
  UINT16 i;
  struct RoomItemStruct *rItem;

  rItem = m_pRList;
  for (i = 0; i < m_nRCount; i ++){
	if (rItem == NULL)
	  break;
	if (rItem->roomItem.roomId == roomId){
	  if (m_pCurrentRoom == NULL)
        m_pCurrentRoom = (struct RoomItemStruct *)MALLOC(sizeof(struct RoomItemStruct));
      if (m_pCurrentRoom == NULL)
	    break;
	  MEMCPY(&(m_pCurrentRoom->roomItem), &(rItem->roomItem), sizeof(struct RoomStruct));
	  m_pCurrentRoom->roomNext = NULL;
	  break;
	}
	rItem = rItem->roomNext;
  }
}

void CBrewHall::onSeatInfo(UINT16 gameId, UINT16 serverId, UINT8 roomId, UINT16 num, struct SeatItemStruct *cItem){
	if(m_nHallRunFlag == false)
		return;
	
  UINT16 i;
  struct SeatItemStruct *cFromItem;
  struct SeatItemStruct *cToItem;
  struct SeatItemStruct *cLastItem;

  if(m_nCurCv == Canvas2)
  {
	  CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
	  p->Invalidate();
  }

  for (i = 0; i < m_nCCount; i ++){
    cToItem = m_pCList;
	if (cToItem == NULL)
	  break;
	m_pCList = m_pCList->seatNext;
	FREE(cToItem);
  }
  m_nCCount = 0;

  cLastItem = NULL;
  cFromItem = cItem;
  for (i = 0; i < num; i ++){
	if (cFromItem == NULL)
	  break;
    cToItem = (struct SeatItemStruct *)MALLOC(sizeof(struct SeatItemStruct));
    if (cToItem == NULL)
	  break;
	m_nCCount ++;
	if (cLastItem == NULL){
	  cToItem->seatNext = NULL;
	  m_pCList = cToItem;
	}else{
	  cToItem->seatNext = cLastItem->seatNext;
	  cLastItem->seatNext = cToItem;
	}
	MEMCPY(&(cToItem->seatItem), &(cFromItem->seatItem), sizeof(struct SeatInfoStruct));
	cLastItem = cToItem;
	cFromItem = cFromItem->seatNext;
  }
  if (m_nHallState == HALL_CHOOSE_SEAT)
	m_nHallState = HALL_UPDATE_SEAT_LIST;
}

void CBrewHall::onSitDown(UINT8 tableId, UINT8 seatId, UINT8 action, UINT8 retCode){
	if(m_nHallRunFlag == false)
		return;
	
  if (frame == NULL){
    m_nHallState = HALL_WAIT_SEAT_LIST;
	if(m_nCurCv == Canvas2)
	{
		CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
		p->OnFailed();
	}
	return;
  }


  
  switch (retCode){
    case 0:
	case 1:
		frame->queryTable(tableId,0);
	  m_nHallRunFlag = FALSE;
	  frame->showHint(NULL,0,HINT_BOTTOM);
	  frame->postUserEvent(GAME, SWITCH_INTO, 0);
	  SetCanvas(Canvas1);
	  break;
	default:
	  m_nHallState = HALL_WAIT_SEAT_LIST;
	  if(m_nCurCv == Canvas2)
	  {
		  CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
		  p->OnFailed();
	  }
	  break;
  }
}

void CBrewHall::onInviteUser(UINT16 num, struct InviteItemStruct *inviteItem){
}

void CBrewHall::onChat(UINT16 num, struct ChatItemStruct *chatItem){
}

void CBrewHall::onUserInfo(UINT8 ret, UINT16 num, struct UserItemStruct *uItem){
  UINT16 i;
  UINT16 j;
  struct UserItemStruct *uFromItem;
  struct UserItemStruct *uToItem;
  struct UserItemStruct *uLastItem;

  //总是保存个人信息,第一项是个人信息
  if(m_pUList != NULL)
  {
	  struct UserItemStruct *tmp = (struct UserItemStruct *)MALLOC(sizeof(struct UserItemStruct));
	  MEMCPY(tmp,m_pUList,sizeof(struct UserItemStruct));
	  tmp->userNext = NULL;
	  clearUserList();
	  m_pUList = tmp;
	  m_nUCount = 1;
  }
  ////////////////////////////////////


  uLastItem = NULL;
  uFromItem = uItem;
  for (i = 0; i < num; i ++){
	if (uFromItem == NULL)
	  break;
	uToItem = m_pUList;
	uLastItem = NULL;
	for (j = 0; j < m_nUCount; j ++){
	  if (uToItem == NULL)
		break;
	  if ((uToItem->userItem.userNameLength == uItem->userItem.userNameLength)
	  && (MEMCMP(uToItem->userItem.userName, uItem->userItem.userName, uItem->userItem.userNameLength) == 0))
		break;
	  uLastItem = uToItem;
	  uToItem = uToItem->userNext;
	}
	if (uToItem == NULL){
      uToItem = (struct UserItemStruct *)MALLOC(sizeof(struct UserItemStruct));
      if (uToItem == NULL)
	    break;
	  m_nUCount ++;
	  if (uLastItem == NULL){
	    uToItem->userNext = NULL;
	    m_pUList = uToItem;
	  }else{
	    uToItem->userNext = uLastItem->userNext;
	    uLastItem->userNext = uToItem;
	  }
	}
	MEMCPY(&(uToItem->userItem), &(uFromItem->userItem), sizeof(struct UserInfoStruct));
	uFromItem = uFromItem->userNext;
  }

  if ((m_nHallState == HALL_TEST_QUERY) || (m_nHallState == HALL_GET_QUERY) || (m_nHallState == HALL_WAIT_QUERY))
	m_nHallState = HALL_READY_QUERY;
  else if (m_nHallState == HALL_CHOOSE_QUERY)
	  m_nHallState = HALL_UPDATE_QUERY;
}

void CBrewHall::onDisconnectGameServer(UINT8 retCode){
	if(m_nHallRunFlag == false)
		return;
	
	//clearUserList();
	//clearSeatList();
	if(m_nCurCv == Canvas2)
	{
		CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
		p->onDisconnectGameServer(retCode);
	}
}

void CBrewHall::onYouBack(UINT8 roomId, UINT8 tableId, UINT8 seatId){
	if(m_nCurCv == Canvas2)
	{
		CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
		p->OnReconnect();
	}
}

void CBrewHall::onTableUp(UINT8 tableId, UINT8 action){
}

void CBrewHall::onEvent(AEEEvent eCode, UINT16 wParam, UINT32 dwParam){
  if (frame == NULL)
	return;

  switch (eCode){
    case EVT_COMMAND:
	  if (m_nHallRunFlag == FALSE)
		break;
	  if(m_nCurCv == Canvas2)
	  {
		  //frame->showHint(STRTOWSTR("onevent in hall",szText,20),0,HINT_TOP);
		  CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;

		  boolean b = p->onEvent(eCode,wParam,dwParam);
		  if(b)
			  break;
	  }
      switch (m_nHallState){
        case HALL_CHOOSE_SEAT:
		  m_nCurrentTableId = (wParam >> 8) & 0xFF;
		  m_nCurrentSeatId = wParam & 0xFF;
		  m_nHallState = HALL_READY_ACTION_LIST;
		  if(m_pIMenu)
			IMENUCTL_SetActive(m_pIMenu, FALSE);
	      break;
        case HALL_CHOOSE_ACTION:
		  switch (wParam){
		    case ACTION_SITDOWN:
		      m_nHallState = HALL_TEST_SITDOWN;
			  break;
			case ACTION_QUERY_USER:
		      m_nHallState = HALL_TEST_QUERY;
			  break;
			case ACTION_QUERY_TABLE:
		      m_nHallState = HALL_TEST_QUERY;
			  break;
			default:
			  break;
		  }
	      IMENUCTL_SetActive(m_pIMenu, FALSE);
	      break;
		case HALL_CHOOSE_QUERY:
		  m_nHallState = HALL_READY_SEAT_LIST;
	      IMENUCTL_SetActive(m_pIMenu, FALSE);
		  break;
	    default:
	      break;
	  }
	  break;
    case EVT_USER:
	  switch (wParam){
	    case SWITCH_INTO:
	      //frame->setCanvas(m_pIHallCanvas);
			SetCanvas(Canvas2);			

		  m_nHallState = HALL_WAIT_SEAT_LIST;
		  m_nHallRunFlag = TRUE;
		  break;
		default:
		  break;
	  }
	  break;
	default:
	  break;
  }
  return;
}

void CBrewHall::onStart(){
}

void CBrewHall::onStop(){
  freeData();
}

void CBrewHall::onSuspend(){
	if (m_pIMenu != NULL){
		IMENUCTL_Release(m_pIMenu);
		m_pIMenu = NULL;
	}
	if(m_nCurCv != Canvas1)
		((CBrewLoginCanvasBase*)m_pIHallCanvas)->onSuspend();
}

void CBrewHall::onResume(){
	if(m_nCurCv != Canvas1)
		((CBrewLoginCanvasBase*)m_pIHallCanvas)->onResume();
}

void CBrewHall::onPlay(){
  UINT32 timeMS;
  //UINT16 i;
  //UINT16 j;
  //struct SeatItemStruct *cItem;
 // struct UserItemStruct *uItem;
  //AEERect r;
//  UINT16 mId;

  if (m_nHallRunFlag == FALSE)
	return;

  if (frame == NULL)
	return;

  timeMS = ISHELL_GetUpTimeMS(pApp->m_pApp->m_pIShell);
  switch (m_nHallState){
    case HALL_INIT:
	  m_nHallState = HALL_WAIT_SEAT_LIST;
	  break;
	case HALL_WAIT_SEAT_LIST:
	  if ((m_pCList != NULL) && (m_nCCount > 0))
		m_nHallState = HALL_READY_SEAT_LIST;
	  break;
    case HALL_READY_SEAT_LIST:
    case HALL_UPDATE_SEAT_LIST:
		if(m_nCurCv == Canvas1)
		{
			SetCanvas(Canvas2);			
		}
		break;	  
	  break;
    case HALL_CHOOSE_SEAT:
	  break;
	case HALL_READY_ACTION_LIST:	  
	  break;
    case HALL_CHOOSE_ACTION:
	  break;
	case HALL_TEST_SITDOWN:
	  if (frame->sitDown((UINT8)m_nCurrentTableId, (UINT8)m_nCurrentSeatId, 0) == OK)
		m_nHallState = HALL_GET_SITDOWN;
	  break;
	case HALL_GET_SITDOWN:
	  m_nHallState = HALL_WAIT_SITDOWN;
	  m_nWaitSitdownTime = timeMS;
	  break;
    case HALL_WAIT_SITDOWN:
	  if (timeMS > m_nWaitSitdownTime + TIMEOUT)
		//m_nHallState = HALL_GET_SITDOWN;
	  {
		  if(m_nCurCv == Canvas2)
		  {
			  CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
			  p->TimeOut();
		  }
		  m_nHallState = HALL_CHOOSE_SEAT;
	  }
	  break;
	case HALL_TEST_QUERY:
	  if (m_nCurrentTableId == 0){
		m_nHallState = HALL_WAIT_SEAT_LIST;
	  }else{
		if (frame->queryTable((UINT8)m_nCurrentTableId, (UINT8)m_nCurrentSeatId) == OK){
		  //clearUserList();
		  m_nHallState = HALL_GET_QUERY;
		}
	  }
	  break;
	case HALL_GET_QUERY:
	  m_nHallState = HALL_WAIT_QUERY;
	  m_nWaitQueryTime = timeMS;
	  break;
    case HALL_WAIT_QUERY:
	  if (timeMS > m_nWaitQueryTime + TIMEOUT)
		//m_nHallState = HALL_GET_QUERY;
	  {
		  if(m_nCurCv == Canvas2)
		  {
			  CBrewHallCanvas2 *p = (CBrewHallCanvas2*)m_pIHallCanvas;
			  p->TimeOut();
		  }
		  m_nHallState = HALL_CHOOSE_SEAT;
	  }
	  break;
	case HALL_READY_QUERY:
		break;	  
	  break;
    case HALL_CHOOSE_QUERY:
	  break;
	default:
	  break;
  }
}

struct SeatItemStruct *CBrewHall::findSeatItem(UINT16 tableId, UINT16 seatId){
  UINT16 i;
  struct SeatItemStruct *cItem;

  cItem = m_pCList;
  for (i = 0; i < m_nCCount; i ++){
	if (cItem == NULL)
	  return NULL;
	if ((cItem->seatItem.tableId == tableId) && (cItem->seatItem.seatId == seatId))
	  return cItem;
	cItem = cItem->seatNext;
  }
  return NULL;
}

void CBrewHall::Release(){
  delete this;
}

IBrewHall *CreateBrewHall(){
  return (IBrewHall *)new CBrewHall();
}

void CBrewHall::SetCanvas(CURRENTCANVAS ci)
{
	if (m_pIHallCanvas != NULL)
	{
		m_pIHallCanvas->Release();
		m_pIHallCanvas = NULL;
	}
	switch(ci)
	{
	case Canvas1:
		m_pIHallCanvas = CreateHallCanvas();
		break;
	case Canvas2:
		m_pIHallCanvas = CreateHallCanvas2();
		break;
	//case WaitCanvas:
	//		m_pIHallCanvas = CreateWaitingCanvas();
	//		break;	
	
	}		
	
	if (m_pIHallCanvas != NULL)
	{
		m_pIHallCanvas->setFrame(this);
		frame->setCanvas(m_pIHallCanvas);
		m_nCurCv = ci;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -