答案:
class CallBase;
struct ICallStateListener
{
virtual void OnStateChange(CallBase* call) = 0;
};
enum CallStatus
{
Ringing,
Connecting,
Connected,
Disconnecting,
Disconnected
};
class CallBase
{
public:
const string Number;
public:
void AddListener(ICallStateListener* lsn);
void RemoveListener(ICallStateListener* lsn);
virtual void Hangup();
virtual void SetStatus(CallStatus status);
CallStatus GetStatus()const;
int GetDuration();
protected:
void SetNumber(const string& number);
};
class InCall: public CallBase
{
public:
void Accept();
};
class OutCall: public CallBase
{
public:
void Call(const string& number);
void SendDTMF(char key);
};
class CallManager
{
public:
void OnDialKey();
void OnCancelKey();
void OnHangupKey();
void OnFlashKey();
private:
CallBase* _calls[2];
};