internal async Task <ServerResponse> PushServerUnregister() { 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) { 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); if (result != Interop.PushClient.ServiceError.None) { task.SetException(PushExceptionFactory.CreateResponseException(result)); } return(await task.Task); }
internal async Task <ServerResponse> PushServerRegister() { Log.Info(Interop.PushClient.LogTag, "Register Called"); var task = new TaskCompletionSource <ServerResponse>(); 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); if (regResult < Interop.PushClient.Result.Success || regResult > Interop.PushClient.Result.SystemError) { Log.Error(Interop.PushClient.LogTag, "registerResult is called but has wrong resResult value"); task.SetException(PushExceptionFactory.CreateResponseException(Interop.PushClient.ServiceError.OpearationFailed)); } else { 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) { Log.Error(Interop.PushClient.LogTag, "resigterResult is unset"); registerResult = null; } }; Interop.PushClient.ServiceError result = Interop.PushClient.ServiceRegister(_connection, registerResult, IntPtr.Zero); Log.Info(Interop.PushClient.LogTag, "Interop.PushClient.ServiceRegister Completed"); if (result != Interop.PushClient.ServiceError.None) { Log.Error(Interop.PushClient.LogTag, "Register failed with " + result); task.SetException(PushExceptionFactory.CreateResponseException(result)); lock (_lock) { Log.Error(Interop.PushClient.LogTag, "resigterResult is unset (failed)"); registerResult = null; } } return(await task.Task); }
internal static Task <ServerResponse> PushServerUnregister() { var task = new TaskCompletionSource <ServerResponse>(); unregisterResult = (Interop.PushClient.Result regResult, IntPtr msgPtr, IntPtr userData) => { Log.Info(Interop.PushClient.LogTag, "Unregister Callback Called with " + regResult); if (regResult < Interop.PushClient.Result.Success || regResult > Interop.PushClient.Result.SystemError) { Log.Error(Interop.PushClient.LogTag, "unregisterResult is called but has wrong resResult value"); task.SetException(PushExceptionFactory.CreateResponseException(Interop.PushClient.ServiceError.OpearationFailed)); } else { 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); if (result != Interop.PushClient.ServiceError.None) { task.SetException(PushExceptionFactory.CreateResponseException(result)); } return(task.Task); }