Почему мои данные получают так медленно - UDP в Swift - PullRequest
0 голосов
/ 30 января 2020

Я начал разрабатывать приложение Telemetry ios для игры F1 2019. Я работал нормально с этим кодом, но недавно, когда я тестирую приложение, мне кажется, что я получаю данные очень! медленно. Я скачал подобное приложение, и когда я использую это, он делает то же самое. Любая помощь была бы великолепна, так как это довольно ново для меня.


class ViewController: UIViewController, GCDAsyncUdpSocketDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()
        setupConnection()
    }

    override func viewDidDisappear(_ animated: Bool) {
        socket.close()
    }

    let IP = "192.168.1.100"
    let PORT:UInt16 = 20777
    var socket:GCDAsyncUdpSocket!

    func setupConnection()
    {
        socket = GCDAsyncUdpSocket(delegate: self, delegateQueue:DispatchQueue.main)
        do { try socket.bind(toPort: PORT)} catch { print("Bind Failed")}
        do { try socket.enableBroadcast(true)} catch { print("Broadcast Failed")}
        do { try socket.beginReceiving()} catch { print("beginReceiving not procceed")}

    }

    //MARK:-GCDAsyncUdpSocketDelegate
    func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?)
    {   //change UInt8 to test for same error
        let id: UInt8 = data.scanValue(at: 5, size: MemoryLayout<UInt8>.size)
        //print(id)
        switch id
        {
        case 0:
            break
        case 1: //Session Data

            break
        case 2: //Lap Data
            var header: PacketHeader = data.scanValue(at: 0, size: MemoryLayout<PacketHeader>.size)
            let type1 = LapData(m_lastLapTime: 0, m_currentLapTime: 0, m_bestLapTime: 0, m_sector1Time: 0, m_sector2Time: 0, m_lapDistance: 0, m_totalDistance: 0, m_safetyCarDelta: 0, m_carPosition: 0, m_currentLapNum: 0, m_pitStatus: 0, m_sector: 0, m_currentLapInvalid: 0, m_penalties: 0, m_gridPosition: 0, m_driverStatus: 0, m_resultStatus: 0)
            var convertArray: [LapData] = converttoArray(type: type1, data: data)
            var playerIndex = Int(header.m_playerCarIndex)

            break
        case 3: //Event data

            let eventData: PacketEventData = data.scanValue(at: 0, size: MemoryLayout<PacketEventData>.size)
            //print("EventData: \(eventData.m_eventStringCode)")

            break
        case 4: //Participants Data

            var header: PacketHeader = data.scanValue(at: 0, size: MemoryLayout<PacketHeader>.size)
            var type1 = ParticipantData(m_aiControlled: 0, m_driverId: 0, m_teamId: 0, m_raceNumber: 0, m_nationality: 0, m_name: (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), m_yourTelemetry: 0)
            var convertArray: [ParticipantData] = converttoArray(type: type1, data: data)
            let playerIndex = Int(header.m_playerCarIndex)


            break
        case 5: //Car Setup Data

            var header: PacketHeader = data.scanValue(at: 0, size: MemoryLayout<PacketHeader>.size)
            var type1 = CarSetupData(m_frontWing: 0, m_rearWing: 0, m_onThrottle: 0, m_offThrottle: 0, m_frontCamber: 0, m_rearCamber: 0, m_frontToe: 0, m_rearToe: 0, m_frontSuspension: 0, m_rearSuspension: 0, m_frontAntiRollBar: 0, m_rearAntiRollBar: 0, m_frontSuspensionHeight: 0, m_rearSuspensionHeight: 0, m_brakePressure: 0, m_brakeBias: 0, m_frontTyrePressure: 0, m_rearTyrePressure: 0, m_ballast: 0, m_fuelLoad: 0)
            var convertArray: [CarSetupData] = converttoArray(type: type1, data: data)
            let playerIndex = Int(header.m_playerCarIndex)


            break
        case 6: //Telemetry Data

            let header: PacketHeader = data.scanValue(at: 0, size: MemoryLayout<PacketHeader>.size)
            let type1 = CarTelemetryData(m_speed: 0, m_throttle: 0, m_steer: 0, m_brake: 0, m_clutch: 0, m_gear: 0, m_engineRPM: 0, m_drs: 0, m_revLightsPercent: 0, m_brakesTemperature: (0,0,0,0), m_tyresSurfaceTemperature: (0,0,0,0), m_tyresInnerTemperature: (0,0,0,0), m_engineTemperature: 0, m_tyresPressure: (0,0,0,0), m_surfaceType: (0,0,0,0))
            let convertArray: [CarTelemetryData] = converttoArray(type: type1, data: data)
            let buttonStatus: UInt32 = data.scanValue(at: 1343 , size: MemoryLayout<UInt32>.size)
            let playerIndex = Int(header.m_playerCarIndex)
            let gear = convertArray[playerIndex].m_gear
            let revLights = convertArray[playerIndex].m_revLightsPercent

            speedLabel.text =  String("\(Int(0.6213711922 * Float(convertArray[playerIndex].m_speed))) MPH")



            break
        case 7: // Car Status Data


                break

            default:
                break

            }




        }
}





Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...