Skip to content

Commit 000bd9c

Browse files
committed
Use TaskCompletionSource instead of while waiting method
1 parent 4ad9c7f commit 000bd9c

7 files changed

Lines changed: 39 additions & 30 deletions

File tree

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
using Bazaar.Data;
22
using Bazaar.Callbacks;
3+
using System.Threading.Tasks;
34

45
namespace Bazaar.Poolakey.Callbacks
56
{
67
public class ConnectionCallbackProxy : CallbackProxy<bool>
78
{
8-
public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.ConnectionCallback") { }
9+
public ConnectionCallbackProxy() : base("com.farsitel.bazaar.callback.ConnectionCallback")
10+
{
11+
taskCompletionSource = new TaskCompletionSource<Result<bool>>();
12+
}
913

1014
void onConnect()
1115
{
12-
result = new Result<bool>(Status.Success, "Connection Succeed.") { data = true };
16+
taskCompletionSource.SetResult(new Result<bool>(Status.Success, "Connection Succeed.") { data = true });
1317
}
1418

1519
void onDisconnect()
1620
{
17-
result = new Result<bool>(Status.Disconnected, "Connection Disconnect.") { data = false };
21+
taskCompletionSource.SetResult(new Result<bool>(Status.Disconnected, "Connection Disconnect.") { data = false });
1822
}
1923

2024
void onFailure(string message, string stackTrace)
2125
{
22-
result = new Result<bool>(Status.Failure, message, stackTrace) { data = false };
26+
taskCompletionSource.SetResult(new Result<bool>(Status.Failure, message, stackTrace) { data = false });
2327
}
2428
}
2529
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
using Bazaar.Data;
22
using Bazaar.Callbacks;
3+
using System.Threading.Tasks;
34

45
namespace Bazaar.Poolakey.Callbacks
56
{
67
public class ConsumeCallbackProxy : CallbackProxy<bool>
78
{
8-
public ConsumeCallbackProxy() : base("com.farsitel.bazaar.callback.ConsumeCallback") { }
9+
public ConsumeCallbackProxy() : base("com.farsitel.bazaar.callback.ConsumeCallback")
10+
{
11+
taskCompletionSource = new TaskCompletionSource<Result<bool>>();
12+
}
913

1014
void onSuccess()
1115
{
12-
result = new Result<bool>(Status.Success, "Consumption Succeed.") { data = true };
16+
taskCompletionSource.SetResult(new Result<bool>(Status.Success, "Consumption Succeed.") { data = true });
1317
}
1418

1519
void onFailure(string message, string stackTrace)
1620
{
17-
result = new Result<bool>(Status.Failure, message, stackTrace) { data = false };
21+
taskCompletionSource.SetResult(new Result<bool>(Status.Failure, message, stackTrace) { data = false });
1822
}
1923
}
2024
}

poolakeyunitysdk-unity/Assets/Bazaar/Poolakey/Scripts/Callbacks/PaymentCallbackProxy.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Bazaar.Data;
33
using Bazaar.Callbacks;
44
using Bazaar.Poolakey.Data;
5+
using System.Threading.Tasks;
56

67
namespace Bazaar.Poolakey.Callbacks
78
{
@@ -12,6 +13,7 @@ public class PaymentCallbackProxy : CallbackProxy<PurchaseInfo>
1213
public PaymentCallbackProxy(Action<Result<PurchaseInfo>> onStartAction) : base("com.farsitel.bazaar.callback.PaymentCallback")
1314
{
1415
this.onStartAction = onStartAction;
16+
taskCompletionSource = new TaskCompletionSource<Result<PurchaseInfo>>();
1517
}
1618

1719
void onStart()
@@ -21,18 +23,18 @@ void onStart()
2123

2224
void onCancel()
2325
{
24-
result = new Result<PurchaseInfo>(Status.Canceled, null, "Purchase flow canceled.");
26+
taskCompletionSource.SetResult(new Result<PurchaseInfo>(Status.Canceled, null, "Purchase flow canceled."));
2527
}
2628

2729
void onSuccess(string orderId, string purchaseToken, string payload, string packageName, int purchaseState, long purchaseTime, string productId, string originalJson, string dataSignature)
2830
{
2931
var purchase = new PurchaseInfo { orderId = orderId, purchaseToken = purchaseToken, payload = payload, packageName = packageName, purchaseState = (PurchaseInfo.State)purchaseState, purchaseTime = purchaseTime, productId = productId, originalJson = originalJson, dataSignature = dataSignature };
30-
result = new Result<PurchaseInfo>(Status.Success, "Purchase Succeed.") { data = purchase };
32+
taskCompletionSource.SetResult(new Result<PurchaseInfo>(Status.Success, "Purchase Succeed.") { data = purchase });
3133
}
3234

3335
void onFailure(string message, string stackTrace)
3436
{
35-
result = new Result<PurchaseInfo>(Status.Failure, message, stackTrace);
37+
taskCompletionSource.SetResult(new Result<PurchaseInfo>(Status.Failure, message, stackTrace));
3638
}
3739
}
3840
}

poolakeyunitysdk-unity/Assets/Bazaar/Poolakey/Scripts/Callbacks/PurchasesCallbackProxy.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
using Bazaar.Callbacks;
44
using Bazaar.Poolakey.Data;
55
using System.Collections.Generic;
6+
using System.Threading.Tasks;
67

78
namespace Bazaar.Poolakey.Callbacks
89
{
910
public class PurchasesCallbackProxy : CallbackProxy<List<PurchaseInfo>>
1011
{
11-
public PurchasesCallbackProxy() : base("com.farsitel.bazaar.callback.PurchasesCallback") { }
12+
public PurchasesCallbackProxy() : base("com.farsitel.bazaar.callback.PurchasesCallback") {
13+
taskCompletionSource = new TaskCompletionSource<Result<List<PurchaseInfo>>>();
14+
}
1215

1316
void onSuccess(AndroidJavaObject purchaseEntity)
1417
{
@@ -18,12 +21,12 @@ void onSuccess(AndroidJavaObject purchaseEntity)
1821
{
1922
list.Add(new PurchaseInfo(purchaseEntity.Call<AndroidJavaObject>("get", index)));
2023
}
21-
result = new Result<List<PurchaseInfo>>(Status.Success, "Get purchases completed.") { data = list };
24+
taskCompletionSource.SetResult(new Result<List<PurchaseInfo>>(Status.Success, "Get purchases completed.") { data = list });
2225
}
2326

2427
void onFailure(string message, string stackTrace)
2528
{
26-
result = new Result<List<PurchaseInfo>>(Status.Failure, message, stackTrace);
29+
taskCompletionSource.SetResult(new Result<List<PurchaseInfo>>(Status.Failure, message, stackTrace));
2730
}
2831
}
2932
}

poolakeyunitysdk-unity/Assets/Bazaar/Poolakey/Scripts/Callbacks/SKUDetailsCallbackProxy.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
using Bazaar.Callbacks;
44
using Bazaar.Poolakey.Data;
55
using System.Collections.Generic;
6+
using System.Threading.Tasks;
67

78
namespace Bazaar.Poolakey.Callbacks
89
{
910
public class SKUDetailsCallbackProxy : CallbackProxy<List<SKUDetails>>
1011
{
11-
public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetailsCallback") { }
12+
public SKUDetailsCallbackProxy() : base("com.farsitel.bazaar.callback.SKUDetailsCallback")
13+
{
14+
taskCompletionSource = new TaskCompletionSource<Result<List<SKUDetails>>>();
15+
}
1216

1317
void onSuccess(AndroidJavaObject purchaseEntity)
1418
{
@@ -18,12 +22,12 @@ void onSuccess(AndroidJavaObject purchaseEntity)
1822
{
1923
list.Add(new SKUDetails(purchaseEntity.Call<AndroidJavaObject>("get", index)));
2024
}
21-
result = new Result<List<SKUDetails>>(Status.Success, "Fetch SKU details completed.") { data = list };
25+
taskCompletionSource.SetResult(new Result<List<SKUDetails>>(Status.Success, "Fetch SKU details completed.") { data = list });
2226
}
2327

2428
void onFailure(string message, string stackTrace)
2529
{
26-
result = new Result<List<SKUDetails>>(Status.Failure, message, stackTrace);
30+
taskCompletionSource.SetResult(new Result<List<SKUDetails>>(Status.Failure, message, stackTrace));
2731
}
2832
}
2933
}

poolakeyunitysdk-unity/Assets/Bazaar/Poolakey/Scripts/Payment.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public async Task<Result<bool>> Connect(Action<Result<bool>> onComplete = null)
2222
{
2323
var callback = new ConnectionCallbackProxy();
2424
bridge.Call("connect", paymentConfiguration.securityCheck.rsaPublicKey, callback);
25-
result = await callback.WaitForResult();
25+
result = await callback.taskCompletionSource.Task;
2626
}
2727
else
2828
{
@@ -46,7 +46,7 @@ public async Task<Result<List<SKUDetails>>> GetSkuDetails(string productIds, SKU
4646
{
4747
var callback = new SKUDetailsCallbackProxy();
4848
bridge.Call("getSkuDetails", type.ToString(), productIds, callback);
49-
result = await callback.WaitForResult();
49+
result = await callback.taskCompletionSource.Task;
5050
}
5151
else
5252
{
@@ -63,7 +63,7 @@ public async Task<Result<List<PurchaseInfo>>> GetPurchases(SKUDetails.Type type
6363
{
6464
var callback = new PurchasesCallbackProxy();
6565
bridge.Call("getPurchases", type.ToString(), callback);
66-
result = await callback.WaitForResult();
66+
result = await callback.taskCompletionSource.Task;
6767
}
6868
else
6969
{
@@ -80,7 +80,7 @@ public async Task<Result<PurchaseInfo>> Purchase(string productId, SKUDetails.Ty
8080
{
8181
var callback = new PaymentCallbackProxy(onStart);
8282
bridge.Call("purchase", type.ToString(), productId, payload, dynamicPriceToken, callback);
83-
result = await callback.WaitForResult();
83+
result = await callback.taskCompletionSource.Task;
8484
}
8585
else
8686
{
@@ -92,13 +92,12 @@ public async Task<Result<PurchaseInfo>> Purchase(string productId, SKUDetails.Ty
9292

9393
public async Task<Result<bool>> Consume(string token, Action<Result<bool>> onComplete = null)
9494
{
95-
9695
Result<bool> result = Result<bool>.GetDefault();
9796
if (isAndroid)
9897
{
9998
var callback = new ConsumeCallbackProxy();
10099
bridge.Call("consume", token, callback);
101-
result = await callback.WaitForResult();
100+
result = await callback.taskCompletionSource.Task;
102101
}
103102
else
104103
{

poolakeyunitysdk-unity/Assets/Bazaar/Scripts/Callbacks/CallbackProxy.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,7 @@ namespace Bazaar.Callbacks
66
{
77
public class CallbackProxy<T> : AndroidJavaProxy
88
{
9-
protected Result<T> result;
109
public CallbackProxy(string address) : base(address) { }
11-
12-
public async Task<Result<T>> WaitForResult()
13-
{
14-
while (result == null)
15-
await Task.Delay(100);
16-
return (Result<T>)result;
17-
}
10+
public TaskCompletionSource<Result<T>> taskCompletionSource;
1811
}
1912
}

0 commit comments

Comments
 (0)