Skip to content

Commit 5cfdde3

Browse files
committed
Conversation service status
1 parent 05ce870 commit 5cfdde3

File tree

1 file changed

+78
-7
lines changed

1 file changed

+78
-7
lines changed

Scripts/Services/Conversation/Conversation.cs

Lines changed: 78 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)