public Client() { IPHostEntry ipHostInfo = Dns.GetHostEntry("ec2-13-125-174-231.ap-northeast-2.compute.amazonaws.com"); IPAddress ipAddress = ipHostInfo.AddressList[0]; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ipEndPoint = new IPEndPoint(ipAddress, Port); receiveBuffer = new byte[Setting.MaxSize]; sendBuffer = new byte[Setting.MaxSize]; socketAsyncEventArgs = new SocketAsyncEventArgs(); socketAsyncEventArgs.SetBuffer(receiveBuffer, 0, receiveBuffer.Length); socketAsyncEventArgs.Completed += ReceivePacket; packetTypeToAction = new Dictionary <PacketType, Action <byte[]> >() { { PacketType.PlayerNumber, ReceivePlayerNumber }, { PacketType.Attack, ReceiveAttack }, { PacketType.Summon, ReceiveSummon }, { PacketType.Skill, ReceiveSkill }, { PacketType.DeckDataRequest, ReceiveDeckDataRequest }, { PacketType.EnemyDeckData, ReceiveEnemyDeckData }, { PacketType.BattleStart, ReceiveBattleStart }, { PacketType.Synchronizaion, ReceiveSynchronization }, { PacketType.Disconnection, ReceiveEnemyDisconnection }, { PacketType.Reconnection, ReceiveEnemyReconnection }, { PacketType.ReconnectionSync, ReceiveEnemyAllSynchronizationData }, { PacketType.SynchronizationComplete, ReceiveEnemySynchronizationComplete }, }; MultiBattleDataManager.Initialize(this); }
private void AddExecutionDataToManager(ExecutionData executionData) { if (MultiBattleDataManager.executionDataOrder == executionData.order) { MultiBattleDataManager.EnqueueExecutionData(executionData); } if (MultiBattleDataManager.executionDataOrder < executionData.order) { MultiBattleDataManager.AddOutOfSequenceData(executionData); } }
private void SendPacket(int packetSize) { try { socket.Send(sendBuffer, packetSize, SocketFlags.None); } catch (SocketException e) { Debug.Log(LogType.Exception, "SocketException"); MultiBattle.Instance.myNetworkingState = MyNetworkingState.Disconnected; MultiBattleDataManager.ClearExecutionQueue(); MultiBattleDataManager.ClearOutOfSequenceDatas(); MultiBattleDataManager.ResetExecutionDataOrder(); TryReconnection(); } }
public void SendReconnectionSynchronization() { Debug.Log(LogType.Test, "<Color=red> SendReconnectionSynchronization </Color>"); int packetSize = 1; sendBuffer[0] = SocketInfo.PacketStartNumber; ByteConverter.FromInt((int)PacketType.ReconnectionSync, sendBuffer, ref packetSize); ByteConverter.FromInt(0, sendBuffer, ref packetSize); SpawnManager.CopyUnitDatasToBuffer(sendBuffer, true, ref packetSize); MultiBattleDataManager.CopyExecutionDatasToBuffer(sendBuffer, ref packetSize); ByteConverter.FromInt(packetSize, sendBuffer, SocketInfo.PacketSizeStartIndex); SendPacket(packetSize); }
private void SynchronizeExecutionDatas(byte[] syncData, int unitCount) { Debug.Log(LogType.Test, "SynchronizeExecutionDatas"); int index = 13 + 17 * unitCount; int order = ByteConverter.ToInt(syncData, ref index); int executionDataCount = ByteConverter.ToInt(syncData, ref index); ExecutionData executionData = new ExecutionData(); for (int count = 1; count < executionDataCount; count++) { ExecutionType executionType = (ExecutionType)ByteConverter.ToInt(syncData, ref index); if (executionType == ExecutionType.Attack) { executionData.type = executionType; executionData.order = (order - executionDataCount) + (count - 1); } else if (executionType == ExecutionType.Summon) { executionData.type = executionType; executionData.order = (order - executionDataCount) + (count - 1); executionData.isMine = count / 2 == 1 ? true : false; executionData.summonDeckIndex = ByteConverter.ToInt(syncData, ref index); executionData.position = new Vector3(ByteConverter.ToInt(syncData, ref index), ByteConverter.ToInt(syncData, ref index), 0); } else if (executionType == ExecutionType.Skill) { executionData.type = executionType; executionData.order = (order - executionDataCount) + (count - 1); } else { Debug.Log(LogType.Exception, "SynchronizeEnemyBattleData " + "OufOfExecutionTypeRange"); } } MultiBattleDataManager.EnqueueExecutionData(executionData); }
private IEnumerator StartBattle() { Debug.Log(LogType.Test, "MultiBattle StartBattle"); ExecutionData executionData; while (Setting.GameState == GameState.Battle) { yield return(new WaitForSeconds(0.2f)); //if (enemyNetworkingState == EnemyNetworkingState.Synchronizating) // SynchronizeEnemyBattleData(MultiBattleDataManager.synchronizationData); //if (enemyNetworkingState == EnemyNetworkingState.WaitingSynchronization || myNetworkingState == MyNetworkingState.Disconnected) // continue; //if (enemyNetworkingState == EnemyNetworkingState.Reconnected) //{ // client.SendReconnectionSynchronization(); // enemyNetworkingState = EnemyNetworkingState.WaitingSynchronization; // continue; //} if ((enemyNetworkingState == EnemyNetworkingState.Connected) && (MultiBattleDataManager.GetExecutionQueueCount() <= 0 || !isSynchronized)) { if (MultiBattleDataManager.canSynchronize) { Synchronize(MultiBattleDataManager.synchronizationData); } continue; } executionData = MultiBattleDataManager.DequeueExecutionData(); Command(executionData); } }