@@ -197,14 +197,85 @@ public string GetServiceID()
197197 return SERVICE_ID ;
198198 }
199199
200- public void GetServiceStatus ( ServiceStatus callback )
201- {
202- if ( callback != null && callback . Target != null )
203- {
204- callback ( SERVICE_ID , false ) ;
205- }
206- }
200+ /// <exclude />
201+ public void GetServiceStatus ( ServiceStatus callback )
202+ {
203+ if ( Config . Instance . FindCredentials ( SERVICE_ID ) != null )
204+ new CheckServiceStatus ( this , callback ) ;
205+ else
206+ {
207+ if ( callback != null && callback . Target != null )
208+ {
209+ callback ( SERVICE_ID , false ) ;
210+ }
211+ }
212+ }
213+
214+ private class CheckServiceStatus
215+ {
216+ private Conversation m_Service = null ;
217+ private ServiceStatus m_Callback = null ;
218+ private int m_MessageCount = 0 ;
219+
220+ public CheckServiceStatus ( Conversation service , ServiceStatus callback )
221+ {
222+ m_Service = service ;
223+ m_Callback = callback ;
224+
225+ string customServiceID = Config . Instance . GetVariableValue ( SERVICE_ID + "_ID" ) ;
226+
227+ if ( ! String . IsNullOrEmpty ( customServiceID ) )
228+ {
229+ if ( ! m_Service . Message ( customServiceID , "Hello" , OnMessage ) )
230+ OnFailure ( "Failed to invoke Message()!" ) ;
231+ else
232+ m_MessageCount += 1 ;
233+ }
234+ else
235+ {
236+ if ( ! m_Service . GetWorkspaces ( OnGetWorkspaces ) )
237+ OnFailure ( "Failed to invoke GetWorkspaces()!" ) ;
238+ }
239+ }
240+
241+ private void OnGetWorkspaces ( DataModels . Workspaces workspaces )
242+ {
243+ if ( m_Callback != null )
244+ {
245+ foreach ( DataModels . Workspace workspace in workspaces . workspaces )
246+ {
247+ if ( ! m_Service . Message ( workspace . workspace_id , "Hello" , OnMessage ) )
248+ OnFailure ( "Failed to invoke Message()." ) ;
249+ else
250+ m_MessageCount += 1 ;
251+ }
252+ }
253+ else
254+ OnFailure ( "GetWorkspaces() failed." ) ;
255+ }
256+
257+ private void OnMessage ( DataModels . MessageResponse resp )
258+ {
259+ if ( m_MessageCount > 0 )
260+ {
261+ m_MessageCount -= 1 ;
262+ if ( resp != null )
263+ {
264+ if ( m_MessageCount == 0 && m_Callback != null && m_Callback . Target != null )
265+ m_Callback ( SERVICE_ID , true ) ;
266+ }
267+ else
268+ OnFailure ( "MessageResponse is null." ) ;
269+ }
270+ }
207271
272+ private void OnFailure ( string msg )
273+ {
274+ Log . Error ( "Conversation" , msg ) ;
275+ m_Callback ( SERVICE_ID , false ) ;
276+ m_MessageCount = 0 ;
277+ }
278+ }
208279 #endregion
209280 }
210281}
0 commit comments