Quindi sto scrivendo un gioco e utilizzo il framework Google Play Services
per inviare e ricevere dati.
Devo implementare l'interfaccia IRealTimeEventListener
e sovrascrivere le funzioni seguenti per ricevere i dati della rete in entrata.
class EventHandler : public gpg::IRealTimeEventListener
private:
//IRealTimeEventListener
void OnRoomStatusChanged(gpg::RealTimeRoom const &room) override;
void OnConnectedSetChanged(gpg::RealTimeRoom const &room) override;
void OnP2PConnected(gpg::RealTimeRoom const &room, gpg::MultiplayerParticipant const &participant) override;
void OnP2PDisconnected(gpg::RealTimeRoom const &room, gpg::MultiplayerParticipant const &participant) override;
void OnParticipantStatusChanged(gpg::RealTimeRoom const &room, gpg::MultiplayerParticipant const &participant) override;
void OnDataReceived(gpg::RealTimeRoom const &room, gpg::MultiplayerParticipant const &from_participant, std::vector<uint8_t> data, bool is_reliable)
override;
La mia domanda è: come viene implementata questa funzionalità?
Ho usato il modello Observer
prima, il Subject
chiamerebbe una raccolta di registrati Observers
e passa un evento MA devo registrare il Observer
prima con Subject
.
Nel caso della libreria Google Play Services
c'è NO Registration ho semplicemente implementato l'interfaccia e iniziato a ricevere i dati.
gpg.framework / intestazioni / i_real_time_event_listener.h
#ifndef GPG_I_REAL_TIME_EVENT_LISTENER_H_
#define GPG_I_REAL_TIME_EVENT_LISTENER_H_
#include <vector>
#include "gpg/multiplayer_participant.h"
#include "gpg/real_time_room.h"
namespace gpg {
class GPG_EXPORT IRealTimeEventListener {
public:
virtual ~IRealTimeEventListener() {}
virtual void OnRoomStatusChanged(RealTimeRoom const &room) = 0;
virtual void OnConnectedSetChanged(RealTimeRoom const &room) = 0;
virtual void OnP2PConnected(RealTimeRoom const &room, MultiplayerParticipant const &participant) = 0;
virtual void OnP2PDisconnected(RealTimeRoom const &room, MultiplayerParticipant const &participant) = 0;
virtual void OnParticipantStatusChanged(RealTimeRoom const &room, MultiplayerParticipant const &participant) = 0;
virtual void OnDataReceived(RealTimeRoom const &room, MultiplayerParticipant const &from_participant, std::vector<uint8_t> data, bool is_reliable) = 0;
};
} // namespace gpg
#endif // GPG_I_REAL_TIME_EVENT_LISTENER_H_
Come possono le funzioni dell'interfaccia essere chiamate dalla libreria quando il mio gestore di eventi non si registra con un oggetto all'interno della libreria?