Я начал разрабатывать приложение 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
}
}
}