{
private static readonly object _lock = new object();
private static PushImpl _instance;
+ private static Interop.PushClient.VoidStateChangedCallback stateDelegate = null;
+ private static Interop.PushClient.VoidNotifyCallback notifyDelegate = null;
private static Interop.PushClient.VoidResultCallback registerResult = null;
private static Interop.PushClient.VoidResultCallback unregisterResult = null;
internal void PushServiceConnect(string pushAppId)
{
- Interop.PushClient.VoidStateChangedCallback stateDelegate = (int state, string err, IntPtr userData) =>
+ stateDelegate = (int state, string err, IntPtr userData) =>
{
if (err == null)
{
PushConnectionStateEventArgs args = new PushConnectionStateEventArgs((PushConnectionStateEventArgs.PushState)state, err);
PushClient.StateChange(args);
};
- Interop.PushClient.VoidNotifyCallback notifyDelegate = (IntPtr notification, IntPtr userData) =>
+ notifyDelegate = (IntPtr notification, IntPtr userData) =>
{
Interop.PushClient.ServiceError result;
PushMessageEventArgs ob = new PushMessageEventArgs();
if (registerResult != null)
{
Log.Error(Interop.PushClient.LogTag, "Register callback was already registered with same callback");
+ task.SetException(PushExceptionFactory.CreateResponseException(Interop.PushClient.ServiceError.OpearationFailed));
return await task.Task;
}
registerResult = (Interop.PushClient.Result regResult, IntPtr msgPtr, IntPtr userData) =>
{
Log.Info(Interop.PushClient.LogTag, "Register Callback Called with " + regResult);
- string msg = "";
- if (msgPtr != IntPtr.Zero)
+
+ if (regResult < Interop.PushClient.Result.Success || regResult > Interop.PushClient.Result.SystemError)
{
- msg = Marshal.PtrToStringAnsi(msgPtr);
+ Log.Error(Interop.PushClient.LogTag, "registerResult is called but has wrong resResult value");
+ task.SetException(PushExceptionFactory.CreateResponseException(Interop.PushClient.ServiceError.OpearationFailed));
}
- ServerResponse response = new ServerResponse();
- response.ServerResult = (ServerResponse.Result)regResult;
- response.ServerMessage = msg;
- if (task.TrySetResult(response) == false)
+ else
{
- Log.Error(Interop.PushClient.LogTag, "Unable to set the Result for register");
+ string msg = "";
+ if (msgPtr != IntPtr.Zero)
+ {
+ msg = Marshal.PtrToStringAnsi(msgPtr);
+ }
+ ServerResponse response = new ServerResponse();
+ response.ServerResult = (ServerResponse.Result)regResult;
+ response.ServerMessage = msg;
+ if (task.TrySetResult(response) == false)
+ {
+ Log.Error(Interop.PushClient.LogTag, "Unable to set the Result for register");
+ }
}
lock (_lock)
{
var task = new TaskCompletionSource<ServerResponse>();
unregisterResult = (Interop.PushClient.Result regResult, IntPtr msgPtr, IntPtr userData) =>
{
- Log.Info(Interop.PushClient.LogTag, "Unregister Callback Called");
- string msg = "";
- if (msgPtr != IntPtr.Zero)
+ Log.Info(Interop.PushClient.LogTag, "Unregister Callback Called with " + regResult);
+
+ if (regResult < Interop.PushClient.Result.Success || regResult > Interop.PushClient.Result.SystemError)
{
- msg = Marshal.PtrToStringAnsi(msgPtr);
+ Log.Error(Interop.PushClient.LogTag, "unregisterResult is called but has wrong resResult value");
+ task.SetException(PushExceptionFactory.CreateResponseException(Interop.PushClient.ServiceError.OpearationFailed));
}
- ServerResponse response = new ServerResponse();
- response.ServerResult = (ServerResponse.Result)regResult;
- response.ServerMessage = msg;
- if (task.TrySetResult(response) == false)
+ else
{
- Log.Error(Interop.PushClient.LogTag, "Unable to set the Result for Unregister");
+ string msg = "";
+ if (msgPtr != IntPtr.Zero)
+ {
+ msg = Marshal.PtrToStringAnsi(msgPtr);
+ }
+ ServerResponse response = new ServerResponse();
+ response.ServerResult = (ServerResponse.Result)regResult;
+ response.ServerMessage = msg;
+ if (task.TrySetResult(response) == false)
+ {
+ Log.Error(Interop.PushClient.LogTag, "Unable to set the Result for Unregister");
+ }
}
};
Interop.PushClient.ServiceError result = Interop.PushClient.ServiceDeregister(_connection, unregisterResult, IntPtr.Zero);