Easemob Windows SDK
emcallback.h
1 /************************************************************
2  * * EaseMob CONFIDENTIAL
3  * __________________
4  * Copyright (C) 2015 EaseMob Technologies. All rights reserved.
5  *
6  * NOTICE: All information contained herein is, and remains
7  * the property of EaseMob Technologies.
8  * Dissemination of this information or reproduction of this material
9  * is strictly forbidden unless prior written permission is obtained
10  * from EaseMob Technologies.
11  */
12 //
13 // EMCallback.h
14 //
15 // Copyright (c) 2015 EaseMob Inc. All rights reserved.
16 //
17 
18 #ifndef easemob_EMAsyncCallback_h
19 #define easemob_EMAsyncCallback_h
20 
21 #include "embaseobject.h"
22 #include "emerror.h"
23 
24 #include <memory>
25 #include <functional>
26 #include "emnetworklistener.h"
27 
28 namespace easemob {
29 
30 class EMNetCallback;
31 class EMCallback;
32 class EMConnectionListener;
33 
34 class EASEMOB_API EMCallbackObserverHandle
35 {
36 public:
43  EMCallbackObserverHandle() : mEnabled(new bool(true)) {}
44 
52  virtual ~EMCallbackObserverHandle() { *mEnabled = false;}
53 
54 private:
57  std::shared_ptr<bool> mEnabled;
58  friend EMNetCallback;
59  friend EMCallback;
60  friend EMConnectionListener;
61 };
62 
63 class EASEMOB_API EMNetCallback
64 {
65 public:
66  typedef std::function<int()> _EMNetCallback;
67 
76  const _EMNetCallback callback) :
77  mEnabled(handle.mEnabled), mNetCallback(callback)
78  {
79  }
80 
87  virtual ~EMNetCallback() {}
88 
96  virtual EMNetworkListener::EMNetworkType getNetState()
97  {
98  if (*mEnabled == true)
99  {
100  return EMNetworkListener::EMNetworkType(mNetCallback());
101  }
102  else
103  {
104  return EMNetworkListener::WIFI;
105  }
106  }
107 
108  bool isEnabled()
109  {
110  return *mEnabled;
111  }
112 
113 private:
115  EMNetCallback& operator=(const EMNetCallback&);
116 
117  std::shared_ptr<bool> mEnabled;
118  _EMNetCallback mNetCallback;
119 };
120 
121 typedef std::shared_ptr<EMNetCallback> EMNetCallbackPtr;
122 
123 
124 class EASEMOB_API EMCallback
125 {
126 public:
127  typedef std::function<bool()> EMSuccessCallback;
128  typedef std::function<void(int)> EMProgressCallback;
129  typedef std::function<bool(const easemob::EMErrorPtr)> EMFailCallback;
130 
141  const EMSuccessCallback success = []()->bool{ return false; },
142  const EMFailCallback fail = [](const easemob::EMErrorPtr)->bool{ return false; },
143  const EMProgressCallback progress = [](int){}) :
144  mEnabled(handle.mEnabled), mSuccessCallback(success), mProgressCallback(progress), mFailCallback(fail)
145  {
146  }
147 
154  virtual ~EMCallback() {}
155 
163  virtual bool onSuccess()
164  {
165  if (*mEnabled == true)
166  {
167  return mSuccessCallback();
168  }
169  else
170  {
171  return false;
172  }
173  }
174 
182  virtual bool onFail(const EMErrorPtr error)
183  {
184  if (*mEnabled == true)
185  {
186  return mFailCallback(error);
187  }
188  else
189  {
190  return false;
191  }
192  }
193 
200  virtual void onProgress(int progress)
201  {
202  if (*mEnabled == true)
203  {
204  mProgressCallback(progress);
205  }
206  }
207 
208 private:
209  EMCallback(const EMCallback&);
210  EMCallback& operator=(const EMCallback&);
211 
212  std::shared_ptr<bool> mEnabled;
213  EMSuccessCallback mSuccessCallback;
214  EMProgressCallback mProgressCallback;
215  EMFailCallback mFailCallback;
216 };
217 
218 typedef std::shared_ptr<EMCallback> EMCallbackPtr;
219 
220 }
221 #endif
EMCallbackObserverHandle()
Ovserver handle&#39;s constructor.
Definition: emcallback.h:43
Definition: emcallback.h:124
Definition: emcallback.h:63
virtual EMNetworkListener::EMNetworkType getNetState()
The success callback of async method.
Definition: emcallback.h:96
virtual bool onSuccess()
The success callback of async method.
Definition: emcallback.h:163
virtual bool onFail(const EMErrorPtr error)
The fail callback of async method.
Definition: emcallback.h:182
virtual ~EMCallback()
Callback&#39;s destructor.
Definition: emcallback.h:154
Definition: emconnection_listener.h:17
Definition: emattributevalue.h:28
Definition: emcallback.h:34
EMCallback(const EMCallbackObserverHandle &handle, const EMSuccessCallback success=[]() ->bool{ return false;}, const EMFailCallback fail=[](const easemob::EMErrorPtr) ->bool{ return false;}, const EMProgressCallback progress=[](int){})
Callback&#39;s constructor.
Definition: emcallback.h:140
virtual ~EMCallbackObserverHandle()
Ovserver handle&#39;s destructor.
Definition: emcallback.h:52
virtual void onProgress(int progress)
The progress callback of async method.
Definition: emcallback.h:200
virtual ~EMNetCallback()
NetCallback&#39;s destructor.
Definition: emcallback.h:87
EMNetCallback(const EMCallbackObserverHandle &handle, const _EMNetCallback callback)
NetCallback&#39;s constructor.
Definition: emcallback.h:75