public virtual void Start() { m_PUUID = 0; m_IsUpdate = false; m_pPU = null; m_pProcessUnit = null; m_pProcessUnitBank = new ProcessUnitBank(); do { m_pSocketManager = new SocketManager(); if (null == m_pSocketManager) { Logger.MLNLOG_ERR("Error SocketManager"); break; } if (SocketManager.SOCKETMANAGER_RET_CODE.ERROR == m_pSocketManager.Initialize()) { Logger.MLNLOG_ERR("Error SocketManager Initialize"); break; } m_PUUID = CreatePU(); if (ProcessUnitManager.INVALID_PUUID == m_PUUID) { Logger.MLNLOG_ERR("Error CreatePU"); m_IsUpdate = false; break; } m_pProcessUnit = m_pProcessUnitBank.GetProcessUnitFromId(m_PUUID); m_pPU = (BTL.PU_Client)m_pProcessUnit as BTL.PU_Client; m_pPU.Start(); m_pPU.SetCharaId(m_CharaId); m_pPU.GetRpcConnector().SetSocketManager(m_pSocketManager); m_pPU.GetRpcConnector().SetProcessUnit(m_pProcessUnitBank.GetProcessUnitFromId(m_PUUID)); m_pPU.GetRpcConnector().SetProcessUnitBank(m_pProcessUnitBank); m_pPU.GetRpcConnector().NewRelayConnector(); m_IsUpdate = true; }while (false); }
public virtual void Start() { m_PUUID = 0; m_IsUpdate = false; m_pPU = null; m_pProcessUnit = null; m_pProcessUnitBank = new ProcessUnitBank(); do{ m_pSocketManager = new SocketManager(); if ( null == m_pSocketManager ){ Logger.MLNLOG_ERR("Error SocketManager"); break; } if ( SocketManager.SOCKETMANAGER_RET_CODE.ERROR == m_pSocketManager.Initialize() ){ Logger.MLNLOG_ERR( "Error SocketManager Initialize" ); break; } m_PUUID = CreatePU(); if (ProcessUnitManager.INVALID_PUUID == m_PUUID) { Logger.MLNLOG_ERR("Error CreatePU"); m_IsUpdate = false; break; } m_pProcessUnit = m_pProcessUnitBank.GetProcessUnitFromId(m_PUUID); m_pPU = (BTL.PU_Client)m_pProcessUnit as BTL.PU_Client; m_pPU.Start(); m_pPU.SetCharaId( m_CharaId ); m_pPU.GetRpcConnector().SetSocketManager(m_pSocketManager); m_pPU.GetRpcConnector().SetProcessUnit(m_pProcessUnitBank.GetProcessUnitFromId(m_PUUID)); m_pPU.GetRpcConnector().SetProcessUnitBank(m_pProcessUnitBank); m_pPU.GetRpcConnector().NewRelayConnector(); m_IsUpdate = true; }while ( false ); }
public void SetRpcClient(BTL.PU_Client pRpcClient) { m_pRpcClient = pRpcClient; }
public override void Update() { base.Update(); UInt64 nowTime = Utility.GetSecond(); switch (m_Phase) { case PHASE.PHASE_NONE: { if (null == m_pPU) { break; } RelayConnector pRelayConnector = m_pPU.GetRpcConnector().GetRelayConnector(); if (null == pRelayConnector) { break; } BTL.PU_Client pRpcClient = m_pPU.GetRpcConnector().GetRpcClient(); if (null == pRpcClient) { break; } #if SELECT_SERVER_WEB_API SetPhase(PHASE.PHASE_BATTLE_GET_ROOM_LIST, 0); #else SetPhase(PHASE.PHASE_MATCHING_SELECT_SERVER, 0); #endif } break; #if !SELECT_SERVER_WEB_API case PHASE.PHASE_MATCHING_SELECT_SERVER: { // サーバの選択 if (onSelectServerEvent != null) { onSelectServerEvent(nowTime); } } break; // マッチングサーバへ接続 case PHASE.PHASE_MATCHING_CONNECT_SERVER: { m_pPU.GetRpcConnector().ConnectServer(m_pMatchingServerInfo.ipAddr, m_pMatchingServerInfo.port, m_pMatchingServerInfo.puUid); SetPhase(PHASE.PHASE_MATCHING_WAIT_CONNECT_SERVER, nowTime + WAIT_TIME_CHANGE_PHASE); } break; // マッチングサーバ接続待ち case PHASE.PHASE_MATCHING_WAIT_CONNECT_SERVER: { if (m_pPU.GetRpcConnector().GetRelayConnector().IsEndSetup()) { m_pPU.GetRpcConnector().GetRelayConnector().RegistRequestProcessUnit(); SetPhase(PHASE.PHASE_MATCHING_CONNECT_RPC, 0); break; } if (m_WaitTime < nowTime) { Debug.LogError("Error:マッチングサーバへの接続に失敗しました。IPアドレス、ポート番号について御確認ください。"); Logger.MLNLOG_ERR("Phase Not Change Phase=" + (UInt32)m_Phase); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); } } break; // マッチングサーバとPRC接続 case PHASE.PHASE_MATCHING_CONNECT_RPC: { RelayConnector pRelayConnector = m_pPU.GetRpcConnector().GetRelayConnector(); if (ProcessUnitManager.INVALID_PUUID == pRelayConnector.SendPUUID) { break; } // マッチングプロセスとRPC接続開始 UInt64 rpcId = m_pPU.GetRpcConnector().ConnectRpc(BTL.INTFID.MATCHING, m_pPU.GetRpcConnector().GetPUUID(), pRelayConnector.SendPUUID, pRelayConnector.ClientID); Logger.MLNLOG_INFO("MatchingPU Connect RPCID=0x" + Utility.ToHex(rpcId) + ", dstPUUID=0x" + Utility.ToHex(m_pPU.GetRpcConnector().GetPUUID()) + ", srcPUUID=0x" + Utility.ToHex(pRelayConnector.SendPUUID) + ", clientId=0x" + Utility.ToHex(pRelayConnector.ClientID)); SetPhase(PHASE.PHASE_MATCHING_WAIT_CONNECT_RPC, nowTime + WAIT_TIME_CHANGE_PHASE); } break; // RPC接続待ち case PHASE.PHASE_MATCHING_WAIT_CONNECT_RPC: { if (m_pPU.GetRpcConnector().IsConnectedRpc()) { Logger.MLNLOG_INFO("Change Entry MatchingRoom"); SetPhase(PHASE.PHASE_MATCHING_ENTER_ROOM, 0); break; } if (m_WaitTime < nowTime) { Logger.MLNLOG_ERR("Phase Not Change Phase=" + (UInt32)m_Phase); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); } } break; // マッチングルームへ入室 case PHASE.PHASE_MATCHING_ENTER_ROOM: { // ルームの選択 if (onMatchingEnterRoomEvent != null) { onMatchingEnterRoomEvent(nowTime); } } break; // マッチングが成立しているか問い合わせ case PHASE.PHASE_MATCHING_CHECK_MATCHING_SUCCESS: { // 入室したルームにマッチングが成立しているかを問い合わせる if (m_pPU.GetRoomId() != 0) { // まだバトル予約が完了していないなら、問い合わせ続ける if (BTL.PU_Client.PHASE.PHASE_MATCHING_WAIT_APPOINTMENT == m_pPU.GetPhase()) { if (m_WaitTime_MatchingState < nowTime) { m_WaitTime_MatchingState = nowTime + 1; m_pPU.GetInterface_Matching(m_pPU.GetRpcConnector().GetRPCID()).Send_GetMatchingStatus(m_pPU.GetRoomId()); } } // バトル予約が完了した else { // 予約成功 if (m_pPU.GetBattlePuInfo() != null) { ClientScene.Instance.Log("Appointment Battle Success"); Logger.MLNLOG_INFO("Appointment Battle Success"); SetPhase(PHASE.PHASE_MATCHING_EXIT_ROOM, nowTime + WAIT_TIME_CHANGE_PHASE); } // 空いているバトルが無く、予約に失敗していたら一旦終了 else { ClientScene.Instance.Log("Appointment Battle Failed"); Logger.MLNLOG_INFO("Appointment Battle Failed"); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); } } } else if (m_WaitTime < nowTime) { Logger.MLNLOG_ERR("Phase Not Change Phase=" + (UInt32)m_Phase); SetPhase(PHASE.PHASE_BATTLE_END, 0); } } break; // マッチングが成立したら、バトルに移る前にマッチングルームから退室する case PHASE.PHASE_MATCHING_EXIT_ROOM: { Logger.MLNLOG_INFO("Exit MatchingRoom"); // マッチングルーム退室要求を出す m_pPU.GetInterface_Matching(m_pPU.GetRpcConnector().GetRPCID()).Send_ExitMatchingRoom(GetCharaId(), m_pPU.GetRoomId()); SetPhase(PHASE.PHASE_BATTLE_ENTER_ROOM, nowTime + WAIT_TIME_CHANGE_PHASE); } break; #else case PHASE.PHASE_BATTLE_GET_ROOM_LIST: { if (m_WaitTime < nowTime) { m_WaitTime = nowTime + 10; SendRequest_GetRoomList(); } } break; #endif // バトルルーム入室 case PHASE.PHASE_BATTLE_ENTER_ROOM: { if (BTL.PU_Client.PHASE.PHASE_BATTLE == m_pPU.GetPhase()) { m_pPU.EnterRoom(); SetPhase(PHASE.PHASE_BATTLE_START, nowTime + WAIT_TIME_CHANGE_PHASE); } else if (m_WaitTime < nowTime) { Logger.MLNLOG_ERR("Phase Not Change Phase=" + (UInt32)m_Phase); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); } } break; // バトル開始 case PHASE.PHASE_BATTLE_START: { if (onBattleStartEvent != null) { onBattleStartEvent(nowTime); } if (m_pPU.IsBattle()) { Logger.MLNLOG_INFO("Battle Start"); SetPhase(PHASE.PHASE_BATTLE, 0); ClientScene.Instance.Log("Battle Start"); } else if (m_WaitTime < nowTime) { Logger.MLNLOG_ERR("Phase Not Change Phase=" + (UInt32)m_Phase); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); } } break; // バトル中 case PHASE.PHASE_BATTLE: { if (m_pPU.IsBattle()) { // バトル中に行いたい処理をコール if (onBattleEvent != null) { onBattleEvent(nowTime); } } else { SetPhase(PHASE.PHASE_BATTLE_END, 0); } } break; // バトル終了 case PHASE.PHASE_BATTLE_END: { if (onBattleEndEvent != null) { onBattleEndEvent(nowTime); } Logger.MLNLOG_INFO("Battle End"); SetPhase(PHASE.PHASE_BATTLE_EXIT_ROOM, 0); ClientScene.Instance.Log("Battle End"); } break; // バトルルーム退室 case PHASE.PHASE_BATTLE_EXIT_ROOM: { m_pPU.ExitRoom(); SetPhase(PHASE.PHASE_BATTLE_DISCONNECT, nowTime + WAIT_TIME_PHASE_BATTLE_DISCONNECT); } break; // バトル切断 case PHASE.PHASE_BATTLE_DISCONNECT: { if (m_WaitTime < nowTime) { Logger.MLNLOG_INFO("Battle Disconnect"); m_pPU.DisconnectAll(); SetPhase(PHASE.PHASE_COOL_DOWN, nowTime + WAIT_TIME_PHASE_COOL_DOWN); } } break; case PHASE.PHASE_COOL_DOWN: { if (m_WaitTime < nowTime) { ClearPhase(); m_pPU.GetRpcConnector().RenewRelayConnector(); m_pPU.ClearPhase(); } } break; } #if SELECT_SERVER_WEB_API m_WebApiManager.Update(); #endif }