Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

1 zeile
32 KiB

  1. {"hierarchy":{"paths":[["doc:\/\/rpm.com.production.Scanner\/documentation\/Fueling"]]},"metadata":{"title":"ScanView2_Full_Code","modules":[{"name":"Fueling"}],"roleHeading":"Article","role":"article"},"schemaVersion":{"minor":3,"major":0,"patch":0},"kind":"article","identifier":{"url":"doc:\/\/rpm.com.production.Scanner\/documentation\/Fueling\/ScanView2_Full_Code","interfaceLanguage":"swift"},"primaryContentSections":[{"kind":"content","content":[{"text":"Overview","type":"heading","level":2,"anchor":"overview"},{"syntax":"swift","code":["","import SwiftUI","import NetworkExtension","import CodeScanner","","","struct ScanView2: View {"," @State var isShowingScanner = false"," @State private var isShowingData = false"," @State var assetId: String = \"\""," @State private var isShowingPDF = false"," @State private var remainingSeconds: Double = 0.0"," @State private var rebootButtonColor: Color = .green"," @State var isSaddleOrSwitchTankClick = true"," "," @Environment(\\.managedObjectContext) var moc"," @Environment(\\.dismiss) var dismiss"," @EnvironmentObject var webSocket: WebSocketViewModel"," @EnvironmentObject var networkMonitor: NetworkMonitor"," @EnvironmentObject var coreDataManager: CoreDataManager"," "," @Environment(\\.colorScheme) var colorScheme"," @Environment(\\.dismiss) var dismiss2"," "," @AppStorage(\"dispenseTankFuelType\") var dispenseTankFuelType: String = \"OTR\""," @AppStorage(\"dispenseTankType\") var dispenseTankType: String = \"Saddle Tank\""," @AppStorage(\"dispenseTankID\") var dispenseTankID: String = \"XXXXXX10152\""," @AppStorage(\"dispenseTankCapacity\") var dispenseTankCapacity: String = \"80\""," @AppStorage(\"ssid\") var ssid: String = \"\""," @AppStorage(\"saddleTankFuelLevel\") var saddleTankFuelLevel: String = \"0.69\""," @AppStorage(\"isLoading\") var isLoading = false"," @AppStorage(\"userOTASSID\") var userOTASSID: String = \"\""," @AppStorage(\"userOTAPwd\") var userOTAPwd: String = \"\""," @AppStorage(\"saddleTankFuelLevel\") var partNumber: String = \"XXXXXXX\""," @StateObject var lm = LocationManager()"," "," var userLatitude: String {"," return \"\\(lm.lastLocation?.coordinate.latitude ?? 0)\""," }"," var userLongitude: String {"," return \"\\(lm.lastLocation?.coordinate.longitude ?? 0)\""," }"," "," var isDeliveredVolumeGreaterThanZero: Bool {"," return Double(webSocket.refillStatusMessage.deliveredVolume) ?? 0 > 0"," }"," "," var rebootText: String {"," if remainingSeconds > 0 {"," let dots = String(repeating: \".\", count: Int(remainingSeconds) % 4)"," return \"Update Complete. Rebooting\\(dots) (\\(Int(remainingSeconds)))\""," } else {"," return \"\""," }"," }"," "," var body: some View {"," VStack {"," Image(\"MaximLogo\")"," .resizable()"," .scaledToFit()"," .padding()"," Text(\"Fueling Manager\")"," .font(.largeTitle)"," .fontWeight(.bold)"," Button {"," isShowingPDF.toggle()"," } label: {"," HStack {"," Image(systemName: \"book\")"," Text(\"Manual\")"," }"," }"," .sheet(isPresented: $isShowingPDF) {"," PDFViewUI()"," }"," HStack(alignment:.top){"," VStack (spacing: 1){"," Image(systemName: networkMonitor.isConnectedWiFi ? \"wifi\" : \"wifi.slash\")"," .foregroundColor( networkMonitor.isConnectedWiFi ? .green : .red)"," .font(.title)"," .padding(.bottom, 0)"," Text(\"WiFi\")"," .font(.system(size: 10))"," .foregroundColor( networkMonitor.isConnectedWiFi ? .green : .red)"," }"," VStack (spacing: 1){"," Image(systemName: (networkMonitor.isControllerConnectedWiFi && ssid != \"\") ? \"wifi\" : \"wifi.slash\")"," .foregroundColor( (networkMonitor.isControllerConnectedWiFi && ssid != \"\") ? .green : .red)"," .font(.title)"," .padding(.bottom, 0)"," VStack {"," Text(\"Controller\")"," .font(.system(size: 10))"," .foregroundColor( (networkMonitor.isControllerConnectedWiFi && ssid != \"\") ? .green : .red)"," Text(\"WiFi\")"," .font(.system(size: 10))"," .foregroundColor( (networkMonitor.isControllerConnectedWiFi && ssid != \"\") ? .green : .red)"," }"," }"," VStack (spacing: 1){"," Image(systemName: \"slider.horizontal.2.square\")"," .foregroundColor((networkMonitor.isControllerConnectedWiFi && webSocket.isConnected) ? .green : .red)"," .font(.title)"," .padding(.bottom, 0)"," Text(\"WebSocket\")"," .font(.system(size: 10))"," .foregroundColor((networkMonitor.isControllerConnectedWiFi && webSocket.isConnected) ? .green : .red)"," }"," }"," .padding()"," "," if UIDevice.current.userInterfaceIdiom == .pad {"," VStack {"," Text(\"Controller V\\(webSocket.controllerVersion)\")"," if webSocket.updateComplete {"," Text(rebootText)"," .foregroundColor(.blue)"," .onAppear {"," webSocket.socket.write(string: \">REBOOT;\")"," webSocket.isConnected = false"," networkMonitor.isConnectedWiFi = false"," webSocket.startRebootCountdown(seconds: 120.0, networkMonitor: networkMonitor)"," }"," } else if webSocket.updating {"," ProgressView(value: Float(webSocket.refillStatusMessage.firmwareUpdateBytes), total: webSocket.updateFileSize)"," .frame(width: 100)"," } else if webSocket.updateAvailable {"," Button(\"Update Controller\") {"," webSocket.socket.write(string: \">UPDATE;\")"," webSocket.sendUpdateOverTCP()"," webSocket.updating = true"," }"," }"," }"," ZStack {"," HStack {"," Button {"," webSocket.rebootController(seconds: 30.0, networkMonitor: networkMonitor)"," "," } label: {"," Text(webSocket.rebootButtonText)"," .padding(4)"," }"," .padding(.leading)"," .buttonStyle(BorderedProminentButtonStyle())"," Spacer()"," }"," HStack {"," Spacer()"," VStack {"," if ssid == \"\" {"," Button {"," isShowingScanner.toggle()"," print(\"Trying to scan tank\")"," isSaddleOrSwitchTankClick = true"," } label: {"," HStack {"," Image(systemName: \"qrcode.viewfinder\")"," Text(\"SADDLE TANK\")"," }"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: .gray, foregroundColor: .green, webSocketIsConnected: webSocket.isConnected))"," } else {"," Button {"," isShowingScanner.toggle()"," isSaddleOrSwitchTankClick = true"," print(\"Trying to switch tanks\")"," } label: {"," HStack {"," Image(systemName: \"qrcode.viewfinder\")"," Text(\"SWITCH TANK\")"," }"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: .gray, foregroundColor: .green, webSocketIsConnected: webSocket.isConnected))"," }"," "," if ssid != \"\" {"," Button {"," if networkMonitor.isControllerConnectedWiFi {"," networkMonitor.closeControllerWiFi(ssid: ssid)"," webSocket.socket.disconnect()"," } else {"," if !networkMonitor.isControllerConnectedWiFi {"," if ssid != \"\" {"," networkMonitor.joinWiFiWithSSID_ScanView2(ssid: ssid)"," webSocket.socket?.connect()"," }"," }"," }"," if networkMonitor.getCurrentSSID() != \"\" && networkMonitor.getCurrentSSID() != ssid {"," networkMonitor.isConnectedWiFi = true"," }"," } label: {"," Text(\"\\(networkMonitor.isControllerConnectedWiFi ? \"DISCONNECT\" : \"CONNECT\")\")"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: networkMonitor.isControllerConnectedWiFi ? .gray : .green, foregroundColor: networkMonitor.isControllerConnectedWiFi ? .red : .white, webSocketIsConnected: networkMonitor.isControllerConnectedWiFi ))"," }"," }"," }"," }"," "," if webSocket.scannedTank != \"\" || webSocket.assetType == \"NOTAG\" || webSocket.assetType == \"RERENT\" {"," FuelingView(amountDelivered: $webSocket.amountDelivered, isOverride: $webSocket.isOverride, make: $webSocket.make, model: $webSocket.model, product: $webSocket.product, serialNumber: $webSocket.serialNumber, tankNumber: $webSocket.tankNumber, tankCapacity: $webSocket.tankCapacity, fuelType: $webSocket.fuelType, asset: $webSocket.asset, image: $webSocket.image)"," "," } else {"," SaddleTankView()"," "," }"," "," } else {"," VStack {"," Text(\"Controller V\\(webSocket.controllerVersion)\")"," if webSocket.updateComplete {"," Text(rebootText)"," .foregroundColor(.blue)"," .onAppear {"," webSocket.socket.write(string: \">REBOOT;\")"," webSocket.isConnected = false"," networkMonitor.isConnectedWiFi = false"," webSocket.startRebootCountdown(seconds: 120.0, networkMonitor: networkMonitor)"," }"," } else if webSocket.updating {"," ProgressView(value: Float(webSocket.refillStatusMessage.firmwareUpdateBytes), total: webSocket.updateFileSize)"," .frame(width: 100)"," } else if webSocket.updateAvailable {"," Button(\"Update Controller\") {"," webSocket.socket.write(string: \">UPDATE;\")"," webSocket.sendUpdateOverTCP()"," webSocket.updating = true"," }"," }"," }"," ZStack {"," HStack {"," Button {"," webSocket.rebootController(seconds: 30.0, networkMonitor: networkMonitor)"," } label: {"," Text(webSocket.rebootButtonText)"," .padding(4)"," }"," .padding(.leading)"," .buttonStyle(BorderedProminentButtonStyle())"," Spacer()"," }"," HStack {"," Spacer()"," VStack {"," if ssid == \"\" {"," Button {"," isShowingScanner.toggle()"," print(\"Trying to scan tank\")"," } label: {"," HStack {"," Image(systemName: \"qrcode.viewfinder\")"," Text(\"SADDLE TANK\")"," }"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: .gray, foregroundColor: .green, webSocketIsConnected: webSocket.isConnected))"," } else {"," Button {"," isShowingScanner.toggle()"," print(\"Trying to switch tanks\")"," } label: {"," HStack {"," Image(systemName: \"qrcode.viewfinder\")"," Text(\"SWITCH TANK\")"," }"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: .gray, foregroundColor: .green, webSocketIsConnected: webSocket.isConnected))"," }"," "," if ssid != \"\" {"," Button {"," if networkMonitor.isControllerConnectedWiFi {"," networkMonitor.closeControllerWiFi(ssid: ssid)"," webSocket.socket.disconnect()"," } else {"," if !networkMonitor.isControllerConnectedWiFi {"," if ssid != \"\" {"," networkMonitor.joinWiFiWithSSID_ScanView2(ssid: ssid)"," webSocket.socket?.connect()"," }"," }"," }"," } label: {"," Text(\"\\(networkMonitor.isControllerConnectedWiFi ? \"DISCONNECT\" : \"CONNECT\")\")"," }"," .buttonStyle(PressableButtonStyle(backgroundColor: networkMonitor.isControllerConnectedWiFi ? .gray : .green, foregroundColor: networkMonitor.isControllerConnectedWiFi ? .red : .white, webSocketIsConnected: networkMonitor.isControllerConnectedWiFi ))"," }"," }"," }"," }"," if webSocket.scannedTank != \"\" || webSocket.assetType == \"NOTAG\" || webSocket.assetType == \"RERENT\" {"," FuelingView(amountDelivered: $webSocket.amountDelivered, isOverride: $webSocket.isOverride, make: $webSocket.make, model: $webSocket.model, product: $webSocket.product, serialNumber: $webSocket.serialNumber, tankNumber: $webSocket.tankNumber, tankCapacity: $webSocket.tankCapacity, fuelType: $webSocket.fuelType, asset: $webSocket.asset, image: $webSocket.image)"," } else {"," SaddleTankView()"," }"," }"," "," HStack {"," if webSocket.isScanPerformed && ssid != \"\" && !isSaddleOrSwitchTankClick {"," Button(isDeliveredVolumeGreaterThanZero ? \"DONE\" : \"CANCEL\", action: {"," if isDeliveredVolumeGreaterThanZero {"," webSocket.amountDelivered = Double(webSocket.refillStatusMessage.deliveredVolume) ?? 69.0"," coreDataManager.addFueling(amount: webSocket.amountDelivered, isOverride: webSocket.isOverride, tank: webSocket.scan, latitude: userLatitude, longitude: userLongitude, userId: ssid, imageData: webSocket.imageData, context: moc)"," "," webSocket.resetSystem(webSocket: webSocket, coreDataManager: coreDataManager)"," } else {"," webSocket.resetSystem(webSocket: webSocket, coreDataManager: coreDataManager)"," }"," })"," .buttonStyle(PressableButtonStyle(backgroundColor: .green, foregroundColor: .white, webSocketIsConnected: webSocket.isConnected))"," } else {"," Button(\"SCAN TANK\", action: {"," webSocket.amountDelivered = Double(webSocket.refillStatusMessage.deliveredVolume) ?? 69.0"," isShowingScanner.toggle()"," })"," .buttonStyle(PressableButtonStyle(backgroundColor: .green, foregroundColor: .white, webSocketIsConnected: webSocket.isConnected))"," .sheet(isPresented: $isShowingScanner) {"," CodeScannerView(codeTypes: [.qr], simulatedData: \"Asset|Make|Model|Product|Serial Number|Tank Number|Tank Capacity|Fuel Type\", completion: handleScan)"," .onAppear {"," isSaddleOrSwitchTankClick = true"," }"," }"," "," Button(action: {"," isShowingData = true"," print(\"Show me the data\")"," }, label: {"," Text(\"\\(coreDataManager.fuelingsArray.count) DISPENSES\")"," })"," .buttonStyle(PressableButtonStyle(backgroundColor: .yellow, foregroundColor: .white, webSocketIsConnected: webSocket.isConnected))"," .sheet(isPresented: $isShowingData) {"," FuelingAPIVIew()"," .onDisappear {"," networkMonitor.joinWiFiWithSSID_ScanView2(ssid: ssid)"," webSocket.socket?.connect()"," }"," }"," }"," }"," .padding(.bottom)"," }"," .onAppear(perform: {"," print(\"AppStorge SSID: \\(ssid)\")"," networkMonitor.controllerSSID = ssid"," networkMonitor.fetchNetworkInfo()"," if ssid != \"\" {"," networkMonitor.joinWiFiWithSSID_ScanView2(ssid: ssid)"," networkMonitor.isControllerConnectedWiFi = true"," print(\"Trying to Connect to web socket\")"," networkMonitor.isConnectedWiFi = true"," }"," if networkMonitor.getCurrentSSID() == ssid {"," networkMonitor.joinWiFiWithSSID_ScanView2(ssid: ssid)"," webSocket.connect()"," networkMonitor.isControllerConnectedWiFi = true"," "," } else {"," networkMonitor.isConnectedWiFi = true"," }"," if !networkMonitor.isControllerConnectedWiFi{"," webSocket.socket.disconnect()"," }"," "," })"," .onChange(of: networkMonitor.getCurrentSSID()) { newValue in"," if newValue == ssid {"," networkMonitor.joinWiFiWithSSID(ssid: ssid)"," webSocket.socket.connect()"," }"," }"," .onChange(of: networkMonitor.isControllerConnectedWiFi) { newValue in"," if newValue {"," webSocket.connect()"," }"," }"," .alert(isPresented: $webSocket.isShowingAlert) {"," Alert("," title: Text(webSocket.alertTitle),"," message: Text(webSocket.alertMessage),"," primaryButton: .default(Text(\"OK\")) {"," dismiss2()"," },"," secondaryButton: .cancel()"," )"," }"," .sheet(isPresented: $webSocket.isShowingNoTag) {"," NonTaggedView("," image: $webSocket.image,"," imageData: $webSocket.imageData,"," isShown: $webSocket.isShowingNoTag,"," assetType: $webSocket.assetType,"," asset: $webSocket.tankNumber, onSave: { updatedTankNumber in"," webSocket.tankNumber = updatedTankNumber"," coreDataManager.fetchPilotTankArray(filteringAsset: webSocket.tankNumber)"," setupTankValues(webSocket: webSocket)"," isSaddleOrSwitchTankClick = false"," }) {"," webSocket.resetSystem(webSocket: webSocket, coreDataManager: coreDataManager)"," dismiss()"," }"," }"," .sheet(isPresented: $webSocket.isShowingRental) {"," NonTaggedView("," image: $webSocket.image,"," imageData: $webSocket.imageData,"," isShown: $webSocket.isShowingRental,"," assetType: $webSocket.assetType,"," asset: $assetId,onSave: { _ in"," setupTankValues(webSocket: webSocket)"," isSaddleOrSwitchTankClick = false"," },onCancel: {"," webSocket.resetSystem(webSocket: webSocket, coreDataManager: coreDataManager)"," dismiss()"," }"," )"," }"," }"," "," func handleScan(result: Result<ScanResult, ScanError>) {"," isShowingScanner = false"," switch result {"," case .success(let result):"," webSocket.scan = result.string.components(separatedBy: \"|\")"," webSocket.assetType = webSocket.scan[3]"," webSocket.isScanPerformed = true"," print(\"Scan successful: \\(webSocket.scan)\")"," switch webSocket.assetType {"," case \"Saddle tank\":"," networkMonitor.joinWiFi(result: result.string)"," dispenseTankType = webSocket.scan[3]"," dispenseTankID = webSocket.scan[5]"," dispenseTankFuelType = webSocket.scan[7]"," ssid = networkMonitor.getCurrentSSID() ?? \"\""," partNumber = ssid"," "," print(\"Trying to connect to web socket\")"," "," case \"NOTAG\":"," webSocket.isShowingNoTag = true"," case \"RERENT\":"," webSocket.isShowingRental = true"," default:"," isSaddleOrSwitchTankClick = false"," setupTankValuesWithPayLoad(payload: webSocket.scan, webSocket: webSocket)"," webSocket.scannedTank = webSocket.tankNumber"," print(\"Scanned tank: \\(webSocket.scannedTank)\")"," if webSocket.fuelType == dispenseTankFuelType {"," print(\"Running Pump\")"," print(\"Fuel pump status: \\(webSocket.refillStatusMessage.dyedFuelPump)\")"," if webSocket.informationMessage.informationMessageVersion != \"2\" {"," print(\"Sending >MODE;4; and >RUN;0; commands\")"," webSocket.socket.write(string: \">MODE;4;\")"," webSocket.socket.write(string: \">RUN;0;\\(webSocket.tankCapacity);\")"," } else {"," if webSocket.refillStatusMessage.dyedFuelPump == \"0\" {"," print(\"Sending >RUN;\\(webSocket.tankCapacity); command\")"," usleep(10000)"," webSocket.socket.write(string: \">RUN;\\(webSocket.tankCapacity);\")"," }"," }"," } else if webSocket.fuelType == \"OFF\" {"," print(\"Running Pump - Override\")"," DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {"," webSocket.alertTitle = \"Fuel Type Mismatch\""," webSocket.alertMessage = \"You are trying to pump OTR fuel into an OFF ROAD tank. This will be marked as an override exception for tax purposes.\""," webSocket.isShowingAlert = true"," }"," webSocket.isOverride = true"," if webSocket.informationMessage.informationMessageVersion != \"2\" {"," print(\"Sending >MODE;4; and >RUN;0; commands\")"," webSocket.socket.write(string: \">MODE;4;\")"," webSocket.socket.write(string: \">RUN;0;\\(webSocket.tankCapacity);\")"," } else {"," if webSocket.refillStatusMessage.dyedFuelPump == \"0\" {"," print(\"Sending >RUN;\\(webSocket.tankCapacity); command\")"," usleep(10000)"," webSocket.socket.write(string: \">RUN;\\(webSocket.tankCapacity);\")"," }"," }"," } else {"," print(\"Fuel type mismatch: \\(webSocket.fuelType) != \\(dispenseTankFuelType)\")"," DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {"," webSocket.alertTitle = \"Fuel Type Mismatch\""," webSocket.alertMessage = \"You can't put dyed fuel in this tank.\""," webSocket.isShowingAlert = true"," }"," }"," }"," case .failure(let error):"," print(\"Scanning failed: \\(error.localizedDescription)\")"," }"," }","",""," "," func setupTankValuesWithPayLoad(payload: [String], webSocket: WebSocketViewModel) {"," if payload.count >= 8 {"," webSocket.asset = payload[0]"," webSocket.make = payload[1]"," webSocket.model = payload[2]"," webSocket.product = payload[3]"," webSocket.serialNumber = payload[4]"," webSocket.tankNumber = payload[5]"," webSocket.tankCapacity = Double(payload[6]) ?? 0.0"," webSocket.fuelType = payload[7]"," }"," }"," "," func setupTankValues(webSocket: WebSocketViewModel) {"," switch webSocket.assetType {"," case \"NOTAG\":"," webSocket.asset = coreDataManager.pilotTankArray.first?.asset ?? \"Unknown\""," webSocket.make = coreDataManager.pilotTankArray.first?.make ?? \"Unknown\""," webSocket.model = coreDataManager.pilotTankArray.first?.model ?? \"Unknown\""," webSocket.product = coreDataManager.pilotTankArray.first?.product ?? \"Unknown\""," webSocket.serialNumber = coreDataManager.pilotTankArray.first?.serial ?? \"Uknkown\""," webSocket.tankNumber = coreDataManager.pilotTankArray.first?.tankId ?? \"Unknown\""," webSocket.tankCapacity = Double(coreDataManager.pilotTankArray.first?.tankCapacity ?? \"70.0\") ?? 10.0"," webSocket.fuelType = coreDataManager.pilotTankArray.first?.fuelType ?? \"OFF\""," webSocket.scan = coreDataManager.pilotTankArray.first?.tagText?.components(separatedBy: \"|\") ?? []"," "," case \"RERENT\":"," let selectedRentalEquipment = rentalEquipment[Int(assetId) ?? 1]"," webSocket.asset = \"Unknown\""," webSocket.make = \"Unknown\""," webSocket.model = \"Unknown\""," webSocket.product = selectedRentalEquipment.product"," webSocket.serialNumber = \"Uknkown\""," webSocket.tankNumber = \"Unknown\""," webSocket.tankCapacity = 70.0"," webSocket.fuelType = selectedRentalEquipment.fuelType"," webSocket.scan = [webSocket.asset,webSocket.make,webSocket.model,webSocket.product,webSocket.serialNumber,webSocket.tankNumber,String(webSocket.tankCapacity),webSocket.fuelType]"," default:"," break"," }"," webSocket.scannedTank = webSocket.tankNumber"," if webSocket.fuelType == dispenseTankFuelType {"," if webSocket.informationMessage.informationMessageVersion != \"2\"{"," webSocket.socket.write(string: \">MODE;4;\")"," webSocket.socket.write(string: \">RUN;0;\\(webSocket.tankCapacity);\")"," } else {"," if webSocket.refillStatusMessage.dyedFuelPump == \"0\" {"," usleep(10000)"," webSocket.socket.write(string: \">RUN;\\(webSocket.tankCapacity);\")"," }"," }"," } else if webSocket.fuelType == \"OFF\" {"," DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {"," webSocket.alertTitle = \"Fuel Type Mismatch\""," webSocket.alertMessage = \"You are trying to pump OTR fuel into an OFF ROAD tank. This will be marked as an override exception for tax purposes.\""," webSocket.isShowingAlert = true"," }"," webSocket.isOverride = true"," if webSocket.informationMessage.informationMessageVersion != \"2\"{"," webSocket.socket.write(string: \">MODE;4;\")"," webSocket.socket.write(string: \">RUN;0;\\(webSocket.tankCapacity);\")"," } else {"," if webSocket.refillStatusMessage.dyedFuelPump == \"0\" {"," usleep(10000)"," webSocket.socket.write(string: \">RUN;\\(webSocket.tankCapacity);\")"," }"," }"," } else {"," DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {"," webSocket.alertTitle = \"Fuel Type Mismatch\""," webSocket.alertMessage = \"You can't put dyed fuel in this tank.\""," webSocket.isShowingAlert = true"," }"," }"," }","}"],"type":"codeListing"}]}],"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/fueling\/scanview2_full_code"]}],"references":{"doc://rpm.com.production.Scanner/documentation/Fueling":{"kind":"symbol","url":"\/documentation\/fueling","title":"Fueling","identifier":"doc:\/\/rpm.com.production.Scanner\/documentation\/Fueling","abstract":[{"type":"text","text":"The Scanner app is designed to facilitate secure and efficient fuel management operations, primarily focusing on user authentication, fuel data collection, and network communication. The app includes several key features to ensure seamless and reliable interactions between users and the backend systems, leveraging technologies like WebSockets, Core Data, and biometric authentication."}],"type":"topic","role":"collection"}}}