Created
May 20, 2022 17:17
-
-
Save AliAkberAakash/968466c090d4d529ce5b13b9e2c82d81 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:convert'; | |
import 'package:core/controller/base_controller.dart'; | |
import 'package:rxdart/rxdart.dart'; | |
import 'package:stomp_dart_client/stomp.dart'; | |
import 'package:stomp_dart_client/stomp_config.dart'; | |
import 'package:stomp_dart_client/stomp_frame.dart'; | |
import 'package:stomp_dart_client/stomp_handler.dart'; | |
import 'package:unipet_mobile_refueling/app/di/setup_di.dart'; | |
import 'package:unipet_mobile_refueling/app/module/pump_reserve/controller/pump_reserve_controller.dart'; | |
import 'package:unipet_mobile_refueling/app/module/pump_reserve/data/model/pump_reserve_response.dart'; | |
import 'package:unipet_mobile_refueling/app/module/refueling_instruction/controller/refueling_instruction_controller.dart'; | |
import 'module/pump_reserve/data/model/pump_reserve_push_rsponsee.dart'; | |
class StompClientController extends BaseController { | |
final BehaviorSubject<bool> _isStompConnected = BehaviorSubject.seeded(false); | |
Stream<bool> get isStompConnectedStream => _isStompConnected.stream; | |
bool get isStompConnected => _isStompConnected.value; | |
late final StompClient? _stompClient; | |
final List<StompUnsubscribe> _stompUnsubscribeList = []; | |
void initStompClient(){ | |
logger.d("Initializing stomp client..."); | |
_stompClient = StompClient( | |
config: StompConfig.SockJS( | |
url: 'http:/my-secret-url.com:8080/im', | |
onConnect: _onStompConnect, | |
onWebSocketError: _onStompConnectError, | |
), | |
); | |
_stompClient?.activate(); | |
} | |
void _onStompConnect(StompFrame frame){ | |
logger.d("Connected to stomp client"); | |
logger.d("Stomp Headers ${frame.headers}"); | |
logger.d("Stomp Body ${frame.body}"); | |
_isStompConnected.add(true); | |
} | |
void _onStompConnectError(error){ | |
logger.d("Error connecting to stomp client"); | |
logger.d(error); | |
} | |
void subscribeToClient(String umti){ | |
var unSubscriber = _stompClient?.subscribe( | |
headers: {"id":umti}, | |
destination: '/app/umti/'+umti+'/status', | |
callback: (StompFrame frame){ | |
logger.d("Received stomp data from app is: ${frame.body}"); | |
//_onDataReceived(frame.body); | |
_stompClient?.subscribe( | |
destination: '/topic/umti/'+umti+'/status', | |
callback: (StompFrame frame) { | |
logger.d("Received stomp data from topic is: ${frame.body}"); | |
onTokenData(frame.body); | |
/*_onDataReceived(frame.body);*/ | |
}, | |
); | |
}, | |
); | |
if(unSubscriber != null) { | |
_stompUnsubscribeList.add(unSubscriber); | |
} | |
} | |
void _onDataReceived(stompData){ | |
if(stompData != null) { | |
_handleRemoteMessage(stompData); | |
}else{ | |
logger.d("screen was unmounted"); | |
} | |
} | |
/* void _onAppOpened(RemoteMessage? remoteMessage){ | |
logger.d("remoteMessage: ${remoteMessage?.data}"); | |
if(mounted && remoteMessage != null) { | |
_handleRemoteMessage(remoteMessage); | |
}else{ | |
logger.d("screen was unmounted"); | |
} | |
}*/ | |
void _handleRemoteMessage(stompData){ | |
try{ | |
PumpReservePushResponse pumpReserveResponse = | |
PumpReservePushResponse.fromJson(jsonDecode(stompData)); | |
_sendPumpReservePushResponse(pumpReserveResponse); | |
_handleInstructionScreenPush(pumpReserveResponse); | |
/*RefuelingInstructionController _instructionController = getIt | |
.get<RefuelingInstructionController>();*/ | |
/* // todo fix this | |
if(pumpReserveResponse.umti != null) { | |
_instructionController.umti = pumpReserveResponse.umti!; | |
}*/ | |
}catch(e, stacktrace){ | |
logger.d("Remote message data is not for pump reserve response"); | |
logger.d(e); | |
logger.d(stacktrace); | |
} | |
} | |
void _sendPumpReservePushResponse(PumpReservePushResponse pumpReserveResponse) async{ | |
PumpReserveController pumpReserveController = | |
getIt.get<PumpReserveController>(); | |
if(pumpReserveController.pumpReservePushResponse==null) { | |
pumpReserveController.setPumpReservePushResponse(pumpReserveResponse); | |
}else{ | |
logger.d("Pump Reserve Push already registered, Aborting..."); | |
} | |
} | |
void _handleInstructionScreenPush(PumpReservePushResponse pumpReservePushResponse) { | |
logger.d("Pushing pump reserve response to Instruction screen ${pumpReservePushResponse.step}"); | |
RefuelingInstructionController _instructionController = getIt | |
.get<RefuelingInstructionController>(); | |
_instructionController.setPumpReservePushController(pumpReservePushResponse); | |
} | |
@override | |
void dispose() { | |
_stompClient?.deactivate(); | |
_isStompConnected.close(); | |
super.dispose(); | |
} | |
} | |
void onTokenData(data){ | |
print("Top level $data"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment