ATUnityCBridge.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System.Runtime.InteropServices;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using AOT;
  6. using AnyThinkAds.ThirdParty.LitJson;
  7. using System;
  8. public class ATUnityCBridge {
  9. public delegate void CCallBack(string wrapperClass, string msg);
  10. #if UNITY_IOS || UNITY_IPHONE
  11. [DllImport("__Internal")]
  12. extern static bool at_message_from_unity(string msg, CCallBack callback);
  13. [DllImport("__Internal")]
  14. extern static int at_get_message_for_unity(string msg, CCallBack callback);
  15. [DllImport("__Internal")]
  16. extern static string at_get_string_message_for_unity(string msg, CCallBack callback);
  17. #endif
  18. [MonoPInvokeCallback(typeof(CCallBack))]
  19. static public void MessageFromC(string wrapperClass, string msg) {
  20. Debug.Log("Unity: ATUnityCBridge::MessageFromC(" + wrapperClass + "," + msg + ")");
  21. JsonData jsonData = JsonMapper.ToObject(msg);
  22. if (wrapperClass.Equals("ATRewardedVideoWrapper")) {
  23. Debug.Log("Unity: ATUnityCBridge::MessageFromC(), hit rv");
  24. ATRewardedVideoWrapper.InvokeCallback(jsonData);
  25. } else if (wrapperClass.Equals("ATNativeAdWrapper")) {
  26. ATNativeAdWrapper.InvokeCallback(jsonData);
  27. } else if (wrapperClass.Equals("ATInterstitialAdWrapper")) {
  28. ATInterstitialAdWrapper.InvokeCallback(jsonData);
  29. } else if (wrapperClass.Equals("ATBannerAdWrapper")) {
  30. ATBannerAdWrapper.InvokeCallback(jsonData);
  31. } else if (wrapperClass.Equals("ATNativeBannerAdWrapper")) {
  32. ATNativeBannerAdWrapper.InvokeCallback(jsonData);
  33. } else if (wrapperClass.Equals("ATSplashAdWrapper")) {
  34. ATSplashAdWrapper.InvokeCallback(jsonData);
  35. }
  36. }
  37. static public bool SendMessageToC(string className, string selector, object[] arguments) {
  38. return SendMessageToC(className, selector, arguments, false);
  39. }
  40. static public int GetMessageFromC(string className, string selector, object[] arguments) {
  41. Debug.Log("Unity: ATUnityCBridge::GetMessageFromC()");
  42. Dictionary<string, object> msgDict = new Dictionary<string, object>();
  43. msgDict.Add("class", className);
  44. msgDict.Add("selector", selector);
  45. msgDict.Add("arguments", arguments);
  46. #if UNITY_IOS || UNITY_IPHONE
  47. return at_get_message_for_unity(JsonMapper.ToJson(msgDict), null);
  48. #else
  49. return 0;
  50. #endif
  51. }
  52. static public string GetStringMessageFromC(string className, string selector, object[] arguments) {
  53. Debug.Log("Unity: ATUnityCBridge::GetStringMessageFromC()");
  54. Dictionary<string, object> msgDict = new Dictionary<string, object>();
  55. msgDict.Add("class", className);
  56. msgDict.Add("selector", selector);
  57. msgDict.Add("arguments", arguments);
  58. #if UNITY_IOS || UNITY_IPHONE
  59. return at_get_string_message_for_unity(JsonMapper.ToJson(msgDict), null);
  60. #else
  61. return "";
  62. #endif
  63. }
  64. static public bool SendMessageToC(string className, string selector, object[] arguments, bool carryCallback) {
  65. Debug.Log("Unity: ATUnityCBridge::SendMessageToC()");
  66. Dictionary<string, object> msgDict = new Dictionary<string, object>();
  67. msgDict.Add("class", className);
  68. msgDict.Add("selector", selector);
  69. msgDict.Add("arguments", arguments);
  70. CCallBack callback = null;
  71. if (carryCallback) callback = MessageFromC;
  72. #if UNITY_IOS || UNITY_IPHONE
  73. return at_message_from_unity(JsonMapper.ToJson(msgDict), callback);
  74. #else
  75. return false;
  76. #endif
  77. }
  78. #if UNITY_IOS || UNITY_IPHONE
  79. [DllImport("__Internal")]
  80. extern static bool at_message_from_unity(string msg, Func<string, int> callback);
  81. #endif
  82. static public void SendMessageToCWithCallBack(string className, string selector, object[] arguments, Func<string, int> callback)
  83. {
  84. Debug.Log("Unity: ATUnityCBridge::SendMessageToCWithCallBack()");
  85. Dictionary<string, object> msgDict = new Dictionary<string, object>();
  86. msgDict.Add("class", className);
  87. msgDict.Add("selector", selector);
  88. msgDict.Add("arguments", arguments);
  89. #if UNITY_IOS || UNITY_IPHONE
  90. at_message_from_unity(JsonMapper.ToJson(msgDict), callback);
  91. #endif
  92. }
  93. }