diff --git a/gnss/XtraSystemStatusObserver.h b/gnss/XtraSystemStatusObserver.h index 706a35bc..6bf3f58e 100644 --- a/gnss/XtraSystemStatusObserver.h +++ b/gnss/XtraSystemStatusObserver.h @@ -70,6 +70,7 @@ public : inline const MsgTask* getMsgTask() { return mMsgTask; } void subscribe(bool yes); +protected: void onReceive(const std::string& data) override; private: diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp index 0ee156ee..1df15465 100644 --- a/utils/LocIpc.cpp +++ b/utils/LocIpc.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2017 The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -76,6 +76,7 @@ bool LocIpc::startListeningNonBlocking(const std::string& name) { } bool LocIpc::startListeningBlocking(const std::string& name) { + int fd = socket(AF_UNIX, SOCK_DGRAM, 0); if (fd < 0) { LOC_LOGe("create socket error. reason:%s", strerror(errno)); @@ -100,6 +101,9 @@ bool LocIpc::startListeningBlocking(const std::string& name) { mIpcFd = fd; + // inform that the socket is ready to receive message + onListenerReady(); + ssize_t nBytes = 0; std::string msg = ""; while (1) { diff --git a/utils/LocIpc.h b/utils/LocIpc.h index 8bc13b7d..738d4fbd 100644 --- a/utils/LocIpc.h +++ b/utils/LocIpc.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017 The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -66,15 +66,6 @@ public: // Stop listening to new messages. void stopListening(); - // Callback function for receiving incoming messages. - // Override this function in your derived class to process incoming messages. - // For each received message, this callback function will be called once. - // This callback function will be called in the calling thread of startListeningBlocking - // or in the new LocThread created by startListeningNonBlocking. - // - // Argument data contains the received message. You need to parse it. - virtual void onReceive(const std::string& /*data*/) {} - // Send out a message. // Call this function to send a message in argument data to socket in argument name. // @@ -84,6 +75,20 @@ public: static bool send(const char name[], const std::string& data); static bool send(const char name[], const uint8_t data[], uint32_t length); +protected: + // Callback function for receiving incoming messages. + // Override this function in your derived class to process incoming messages. + // For each received message, this callback function will be called once. + // This callback function will be called in the calling thread of startListeningBlocking + // or in the new LocThread created by startListeningNonBlocking. + // + // Argument data contains the received message. You need to parse it. + inline virtual void onReceive(const std::string& /*data*/) {} + + // LocIpc client can overwrite this function to get notification + // when the socket for LocIpc is ready to receive messages. + inline virtual void onListenerReady() {} + private: static bool sendData(int fd, const sockaddr_un& addr, const uint8_t data[], uint32_t length);