Beispiel #1
0
        private void ReceiveDataCallback(IAsyncResult result)
        {
            try
            {
                int byteLength = stream.EndRead(result);
                if (byteLength <= 0)
                {
                    metaMonoBehaviours.applicationCallbacks.ScheduleFixedUpdateAction(() => playersManager.DisconnectPlayer(playerId));
                    return;
                }

                byte[] data = new byte[byteLength];
                Array.Copy(receiveBuffer, data, byteLength);

                bool shouldReset = HandleData(data, (packetTypeId, packet) => packetsReceiver.ProcessPacket(playerId, packetTypeId, packet, true));
                receivePacket.Reset(shouldReset);

                stream.BeginRead(receiveBuffer, 0, DataBufferSize, ReceiveDataCallback, null);
            }
            catch (Exception exception)
            {
                Logger.LogError(LoggerSection.Network, $"Error receiving TCP data: {exception}");
                metaMonoBehaviours.applicationCallbacks.ScheduleFixedUpdateAction(() => playersManager.DisconnectPlayer(playerId));
            }
        }