Skip to content
This repository has been archived by the owner on Apr 1, 2024. It is now read-only.

非同期処理でTaskを利用できるようしました #119

Merged
merged 14 commits into from
Jul 17, 2018
2 changes: 1 addition & 1 deletion ncmb_unity/Assets/NCMB/Script/NCMBUser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ namespace NCMB
/// 会員管理を操作するクラスです。
/// </summary>
[NCMBClassName ("user")]
public class NCMBUser : NCMBObject
public partial class NCMBUser : NCMBObject
{


Expand Down
72 changes: 72 additions & 0 deletions ncmb_unity/Assets/NCMB/Script/Task/NCMBObjectTaskExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#if (NET_4_6)
using System.Threading.Tasks;

namespace NCMB.Tasks
{
public static class NCMBObjectTaskExtension
{
/// <summary>
/// 非同期処理でオブジェクトの取得を行います。<br/>
/// </summary>
public static Task<T> FetchTaskAsync<T>(this T origin) where T : NCMBObject
{
var tcs = new TaskCompletionSource<T>();
origin.FetchAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(origin);
}
});
return tcs.Task;
}

/// <summary>
/// 非同期処理でオブジェクトの保存を行います。<br/>
/// SaveAsync()を実行してから編集などをしていなく、保存をする必要が無い場合は通信を行いません。<br/>
/// オブジェクトIDが登録されていない新規オブジェクトなら登録を行います。<br/>
/// オブジェクトIDが登録されている既存オブジェクトなら更新を行います。<br/>
/// </summary>
public static Task<T> SaveTaskAsync<T>(this T origin) where T : NCMBObject
{
var tcs = new TaskCompletionSource<T>();
origin.SaveAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(origin);
}
});
return tcs.Task;
}

/// <summary>
/// オブジェクトの削除を行います。<br/>
/// </summary>
public static Task<T> DeleteTaskAsync<T>(this T origin) where T : NCMBObject
{
var tcs = new TaskCompletionSource<T>();
origin.DeleteAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(origin);
}
});
return tcs.Task;
}
}
}
#endif
29 changes: 29 additions & 0 deletions ncmb_unity/Assets/NCMB/Script/Task/NCMBPushTaskExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#if (NET_4_6)
using System.Threading.Tasks;

namespace NCMB.Tasks
{
public static class NCMBPushTaskExtension
{
/// <summary>
/// プッシュの送信を行います。
/// </summary>
public static Task<NCMBPush> SendPushTaskAsync(this NCMBPush origin)
{
var tcs = new TaskCompletionSource<NCMBPush>();
origin.SendPush(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(origin);
}
});
return tcs.Task;
}
}
}
#endif
34 changes: 34 additions & 0 deletions ncmb_unity/Assets/NCMB/Script/Task/NCMBScriptTaskExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#if (NET_4_6)
using System.Collections.Generic;
using System.Threading.Tasks;

namespace NCMB.Tasks
{
public static class NCMBScriptTaskExtension
{
/// <summary>
/// 非同期処理でスクリプトの実行を行います。
/// </summary>
/// <param name="header">リクエストヘッダー.</param>
/// <param name="body">リクエストボディ</param>
/// <param name="query">クエリパラメーター</param>
public static Task<byte[]> ExecuteTaskAsync(this NCMBScript script,
IDictionary<string, object> header, IDictionary<string, object> body, IDictionary<string, object> query)
{
var tcs = new TaskCompletionSource<byte[]>();
script.ExecuteAsync(header, body, query, (data, error) =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(data);
}
});
return tcs.Task;
}
}
}
#endif
162 changes: 162 additions & 0 deletions ncmb_unity/Assets/NCMB/Script/Task/NCMBUserTaskExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#if (NET_4_6)
using System.Collections.Generic;
using System.Threading.Tasks;

namespace NCMB.Tasks
{
public static class NCMBUserTaskExtension
{
/// <summary>
/// 非同期処理でオブジェクトの取得を行います。
/// </summary>
public static Task<NCMBUser> FetchTaskAsync(this NCMBUser user)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.FetchAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;
}

/// <summary>
/// 非同期処理でオブジェクトの保存を行います。<br/>
/// SaveAsync()を実行してから編集などをしていなく、保存をする必要が無い場合は通信を行いません。<br/>
/// オブジェクトIDが登録されていない新規オブジェクトなら登録を行います。<br/>
/// オブジェクトIDが登録されている既存オブジェクトなら更新を行います。<br/>
/// </summary>
public static Task<NCMBUser> SaveTaskAsync(this NCMBUser user)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.Save(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;
}

/// <summary>
/// オブジェクトの削除を行います。
/// </summary>
public static Task<bool> DeleteTaskAsync(this NCMBUser user)
{
var tcs = new TaskCompletionSource<bool>();
user.DeleteAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(true);
}
});
return tcs.Task;
}

/// <summary>
/// 非同期処理で現在ログインしているユーザのauthDataの削除を行います。<br/>
/// </summary>
/// <param name="provider">SNS名</param>
public static Task<NCMBUser> UnLinkWithAuthDataTaskAsync(this NCMBUser user, string provider)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.UnLinkWithAuthDataAsync(provider, error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;

}

/// <summary>
/// 非同期処理で現在ログインしているユーザに、authDataの追加を行います。<br/>
/// authDataが登録されていないユーザならログインし、authDataの登録を行います。<br/>
/// authDataが登録されているユーザなら、authDataの追加を行います。<br/>
/// </summary>
/// <param name="linkParam">authData</param>
public static Task<NCMBUser> LinkWithAuthDataTaskAsync(this NCMBUser user, Dictionary<string, object> linkParam)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.LinkWithAuthDataAsync(linkParam, error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;
}

/// <summary>
/// 非同期処理でauthDataを用いて、ユーザを登録します。<br/>
/// 既存会員のauthData登録はLinkWithAuthDataAsyncメソッドをご利用下さい。<br/>
/// </summary>
public static Task<NCMBUser> LogInWithAuthDataTaskAsync(this NCMBUser user)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.LogInWithAuthDataAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;
}

/// <summary>
/// 非同期処理でユーザを登録します。<br/>
/// オブジェクトIDが登録されていない新規会員ならログインし、登録を行います。<br/>
/// オブジェクトIDが登録されている既存会員ならログインせず、更新を行います。<br/>
/// 既存会員のログインはLogInAsyncメソッドをご利用下さい。<br/>
/// </summary>
public static Task<NCMBUser> SignUpTaskAsync(this NCMBUser user)
{
var tcs = new TaskCompletionSource<NCMBUser>();
user.SignUpAsync(error =>
{
if (error != null)
{
tcs.SetException(error);
}
else
{
tcs.SetResult(user);
}
});
return tcs.Task;
}
}
}
#endif