Пример #1
0
    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);
    }
Пример #2
0
    private void AddExecutionDataToManager(ExecutionData executionData)
    {
        if (MultiBattleDataManager.executionDataOrder == executionData.order)
        {
            MultiBattleDataManager.EnqueueExecutionData(executionData);
        }

        if (MultiBattleDataManager.executionDataOrder < executionData.order)
        {
            MultiBattleDataManager.AddOutOfSequenceData(executionData);
        }
    }
Пример #3
0
    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();
        }
    }
Пример #4
0
    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);
    }
Пример #5
0
    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);
    }
Пример #6
0
    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);
        }
    }