From 412f3954e46f2b7e06ad1b54963aa7796a4883cf Mon Sep 17 00:00:00 2001
From: allez <305670599@qq.com>
Date: 星期四, 30 十一月 2023 22:55:24 +0800
Subject: [PATCH] 0312 咪噜香港sdk

---
 Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png               |    0 
 Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.h                                   |   76 ++++++
 Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.mm                                  |  518 +++++++++++++++++++++++++++++++++++++++++++++++
 Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist |   12 +
 4 files changed, 606 insertions(+), 0 deletions(-)

diff --git a/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png
new file mode 100644
index 0000000..7ac8e4d
--- /dev/null
+++ b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png
Binary files differ
diff --git a/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist
new file mode 100644
index 0000000..ac3d260
--- /dev/null
+++ b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>JPush_AppKey</key>
+	<string>111a5f817592ddc68edc802c</string>
+	<key>TTTrack_AppID</key>
+	<string>155761</string>
+	<key>TrackingIO_AppKey</key>
+	<string>12aef4c284c6996703765fe9f7422428</string>
+</dict>
+</plist>
diff --git a/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.h b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.h
new file mode 100644
index 0000000..01811f1
--- /dev/null
+++ b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.h
@@ -0,0 +1,76 @@
+//
+//  UniversalSDK.h
+//  Unity-iPhone
+//
+//
+
+#ifndef __UNIVERSALSDK_H_
+#define __UNIVERSALSDK_H_
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import <WebKit/WebKit.h>
+#import <MYSDK/MYSDK.h>
+
+#define UNITY_OBJ_NAME "SDKUtility"
+#define UNITY_FUNC_NAME "HandleSdkMessage"
+
+
+#define S2U_BatteryLevel                1
+#define S2U_BatteryCharging             2
+#define S2U_SdkInitComplete             3
+#define S2U_DeviceInfo                  4
+#define S2U_PushClientID                5
+#define S2U_FreePlatformInitOk          100
+#define S2U_FreePlatformInitFail        101
+#define S2U_FreePlatformLoginOk         102
+#define S2U_FreePlatformLoginFail       103
+#define S2U_FreePlatformLoginCancel     104
+#define S2U_FreePlatformLogoutOk        105
+#define S2U_FreePlatformLogoutFail      106
+#define S2U_FreePlatformSwitchAccountOk 107
+#define S2U_FreePlatformPayOk           108
+#define S2U_FreePlatformPayFail         109
+#define S2U_FreePlatformPayCancel       110
+#define S2U_FreePlatformRegisterOk      111
+
+
+#define U2S_BatteryListenStart          1
+#define U2S_BatteryListenStop           2
+#define U2S_CopyContent                 7
+#define U2S_OpenWebView                 8
+#define U2S_Init                        9
+#define U2S_FreePlatformInit            100
+#define U2S_FreePlatformLogin           101
+#define U2S_FreePlatformLogout          102
+#define U2S_FreePlatformSwitchAccount   103
+#define U2S_FreePlatformPay             104
+#define U2S_PayFinished                 105
+#define U2S_CreateRole                  106
+#define U2S_RoleLogin                   107
+#define U2S_RoleLevelUp                 108
+#define U2S_JPushAddLocalMessage        200
+#define U2S_JPushRemoveLocalMessage     201
+#define U2S_MakeKeyAndVisible           300
+#define U2S_SendRegistEvent             500
+#define U2S_SendLoginEvent              600
+
+#define KIsiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
+
+static BOOL     JPush_IsProduction = FALSE;
+
+@interface UniversalSDK : NSObject<WKUIDelegate, WKNavigationDelegate> {
+    WKWebView* m_UIWebView;
+    WKWebView* m_fakeUIWebView;
+    UIButton* m_CloseBtn;
+}
+
+-(void) HandleUnityMessage:(NSString*) json;
+-(void) Init;
+-(id) APNativeJSONObject:(NSData*) data;
+
+-(void) QuickSDKInit:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
+
+@end
+
+#endif
diff --git a/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.mm b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.mm
new file mode 100644
index 0000000..382737a
--- /dev/null
+++ b/Channel/IOS/mlgtgame/Plugins/The2thWorldSDK/UniversalSDK.mm
@@ -0,0 +1,518 @@
+//
+//  UniversalSDK.m
+//  Unity-iPhone
+//
+//  Created by 钄$�� on 2018/4/24.
+//
+
+#import "UniversalSDK.h"
+#import "AdSupport/AdSupport.h"
+#import "opus.h"
+#ifdef NSFoundationVersionNumber_iOS_9_x_Max
+#import <UserNotifications/UserNotifications.h>
+#endif
+#import "SystemConfiguration/CaptiveNetwork.h"
+
+@implementation UniversalSDK
+
+#define CHANNEL_NUM 1
+
+static int s_frequency = 16000;
+static int s_bitRate = 20000;
+static int s_bandMode = OPUS_BANDWIDTH_WIDEBAND;
+static int s_frameSize = 160;
+static int sBatteryLevel = -1;
+static int sBatteryState = -1;
+static NSString* sAppID;
+static NSString* sGameID;
+static NSString* sUserName;
+static NSThread* _thread;
+
+
+-(id)init
+{
+     self = [super init];
+    
+     m_fakeUIWebView = [[WKWebView alloc] initWithFrame:CGRectZero];
+     NSURL *url = [NSURL URLWithString:@"www.baidu.com"];
+     NSURLRequest *request = [NSURLRequest requestWithURL:url
+                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
+                                           timeoutInterval:10.f];
+     [m_fakeUIWebView loadRequest:request];
+
+     return self;
+}
+
+-(void) Init
+{
+    UIDevice *_device = [UIDevice currentDevice];
+    _device.batteryMonitoringEnabled = true;
+    
+    NSString* _uniqueID = [[NSUserDefaults standardUserDefaults] objectForKey:@"tsw_unique_id"];
+    //鑾峰彇IDFA
+    NSString* _idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
+    
+    if(_uniqueID == NULL || [_uniqueID length] <= 0)
+    {
+        //鍒ゆ柇IDFA鏄惁涓虹┖
+        BOOL isEmpty = [[_idfa stringByReplacingOccurrencesOfString:@"-" withString:@""] stringByReplacingOccurrencesOfString:@"0" withString:@""].length;
+        if (isEmpty) {
+            //涓嶄负绌猴紝灏咺DFA浣滀负鍞竴鏍囪瘑
+            _uniqueID = _idfa;
+        }
+        else {
+            //涓虹┖锛岃幏鍙朥UID浣滀负鍞竴鏍囪瘑
+            _uniqueID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
+        }
+        
+        //淇濆瓨鍞竴璁惧鏍囪瘑,濡傚凡瀛樺湪鍒欎笉杩涜浠讳綍澶勭悊
+        [[NSUserDefaults standardUserDefaults] setObject:_uniqueID forKey:@"tsw_unique_id"];
+        [[NSUserDefaults standardUserDefaults] synchronize];
+    }
+    
+    // 鍙栧緱UserAgent
+    [m_fakeUIWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable userAgent, NSError * _Nullable error) {
+
+        NSLog(@"%@", userAgent);
+        NSString* _userAgent = [NSString stringWithFormat:@"%@", userAgent];
+        // 鍙戦�佽澶囦俊鎭�
+        NSMutableDictionary *_dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                      _uniqueID,@"unique_id",
+                                      _idfa,@"android_id",
+                                      [NSNumber numberWithInt:S2U_DeviceInfo],@"code",
+                                      _userAgent,@"userAgent",nil];
+        [self SendMessageToUnity:_dict];
+        }];
+}
+
+-(void)SendMessageToUnity:(NSDictionary*)dict
+{
+    BOOL _result = [NSJSONSerialization isValidJSONObject:dict];
+    if(_result)
+    {
+        NSData* _jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
+        UnitySendMessage(UNITY_OBJ_NAME, UNITY_FUNC_NAME,
+                         [[[NSString alloc] initWithData:_jsonData encoding:NSUTF8StringEncoding] UTF8String]);
+    }
+}
+
+-(void) BatteryThread {
+    while (TRUE)
+    {
+        [NSThread sleepForTimeInterval:1];
+        
+        UIDevice *_device = [UIDevice currentDevice];
+        
+        int _state = [_device batteryState];
+        if(_state != sBatteryState){
+            sBatteryState = _state;
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:sBatteryState], @"status",
+                                   [NSNumber numberWithInt:S2U_BatteryCharging], @"code", nil];
+            
+            [self SendMessageToUnity:_dict];
+        }
+        
+        int _level = (int)([_device batteryLevel] * 100);
+        if(_level != sBatteryLevel){
+            sBatteryLevel = _level;
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:sBatteryLevel], @"level",
+                                   [NSNumber numberWithInt:S2U_BatteryLevel], @"code", nil];
+            
+            [self SendMessageToUnity:_dict];
+        }
+    }
+}
+
+-(void) OpenURL:(NSString*) url {
+    
+    if(m_UIWebView != NULL) {
+        [self btnClick:NULL];
+        return;
+    }
+    
+    CGRect _bounds = UnityGetMainWindow().bounds;
+    
+    float _scale = _bounds.size.width / 1334;
+    
+    float _width = 982 * _scale;
+    float _height = 560 * _scale;
+    
+    float _offsetX = (_bounds.size.width - _width) * .5f;
+    float _offsetY = (_bounds.size.height - _height) * .5f;
+    
+    m_UIWebView = [[WKWebView alloc] initWithFrame:CGRectMake(_offsetX, _offsetY, _width, _height)];
+    m_UIWebView.UIDelegate = self;
+    m_UIWebView.navigationDelegate = self ;
+    m_UIWebView.scrollView.scrollEnabled = YES;
+    m_UIWebView.scrollView.bounces = NO;
+    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+    [m_UIWebView loadRequest:request];
+    
+    
+}
+
+-(void) btnClick:(UIButton*)sender {
+    [m_CloseBtn removeFromSuperview];
+    [m_CloseBtn removeTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    m_CloseBtn = NULL;
+    
+    NSURLCache *_cache = [NSURLCache sharedURLCache];
+    [_cache removeAllCachedResponses];
+    [_cache setDiskCapacity:0];
+    [_cache setMemoryCapacity:0];
+    
+    [m_UIWebView removeFromSuperview];
+    m_UIWebView = NULL;
+}
+
+
+//-(void)webViewDidFinishLoad:(WKWebView *)webView{
+- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
+    
+    CGRect _bounds = UnityGetMainWindow().bounds;
+    
+    float _scale = _bounds.size.width / 1334;
+    
+    float _width = 982 * _scale;
+    float _height = 560 * _scale;
+    
+    m_CloseBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+    [m_CloseBtn setFrame:CGRectMake(_width - 600 * _scale, _height - 86 * _scale, 360 * _scale, 72 * _scale)];
+    [m_CloseBtn setTitle:@"鎴戠煡閬撲簡" forState:UIControlStateNormal];
+    
+    NSString *_bundlePath = [[NSBundle mainBundle] pathForResource:@"The2thWorldRES.bundle" ofType:nil];
+    NSBundle *_bundle = [NSBundle bundleWithPath:_bundlePath];
+    NSString *pic1Path = [_bundle pathForResource:@"TY_AN_34.png" ofType:nil];
+    
+    [m_CloseBtn setBackgroundImage:[UIImage imageWithContentsOfFile:pic1Path] forState:UIControlStateNormal];
+    [m_CloseBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    [m_CloseBtn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    
+    [m_UIWebView addSubview:m_CloseBtn];
+    
+    UIView *view = UnityGetGLViewController().view;
+    [view addSubview:m_UIWebView];
+}
+
+-(void)QuickSDKInit:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    
+
+}
+
+//
+//- (void)smpcQpLoginResult:(NSNotification *)notify {
+//    NSLog(@"鐧诲綍鎴愬姛閫氱煡%@",notify);
+//    int error = [[[notify userInfo] objectForKey:kSmpcQuickSDKKeyError] intValue];
+//    NSDictionary *userInfo = [notify userInfo];
+//    if (error == 0) {
+//        NSString *uid = [[SMPCQuickSDK defaultInstance] userId];
+//        channel = [[SMPCQuickSDK defaultInstance] getConfigValue:@"channel"];
+//        if(channel&&[channel length]!=0)
+//        {
+//
+//        }
+//        else
+//        {
+//            channel = [NSString stringWithFormat:@"%d", [SMPCQuickSDK defaultInstance].channelType];
+//        }
+//        NSString *gameUID = [NSString stringWithFormat:@"%@@%@", uid, channel];
+//        NSString *UserName = [[SMPCQuickSDK defaultInstance] userId];
+//        //鑾峰彇user_token锛岀敤浜庝粠鏈嶅姟鍣ㄥ幓楠岃瘉鐢ㄦ埛淇℃伅
+//        NSString *user_token = userInfo[kSmpcQuickSDKKeyUserToken];
+//
+//        NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+//                               [NSDictionary dictionaryWithObjectsAndKeys:user_token, @"token",
+//                                UserName, @"userName",
+//                                gameUID, @"account", nil],@"info",
+//                               [NSNumber numberWithInt:S2U_FreePlatformLoginOk], @"code", nil];
+//        [self SendMessageToUnity:_dict];
+//    }
+//}
+//
+//- (void)smpcQpLogoutResult:(NSNotification *)notify {
+//    NSLog(@"%s",__func__);
+//    NSDictionary *userInfo = notify.userInfo;
+//    int errorCode = [userInfo[kSmpcQuickSDKKeyError] intValue];
+//    switch (errorCode) {
+//        case SMPC_QUICK_SDK_ERROR_NONE:
+//        {
+//            NSLog(@"娉ㄩ攢鎴愬姛");
+//            //娉ㄩ攢鎴愬姛
+//            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:S2U_FreePlatformLogoutOk], @"code", nil];
+//            [self SendMessageToUnity:_dict];
+//        }
+//            break;
+//        case SMPC_QUICK_SDK_ERROR_LOGOUT_FAIL:
+//        default:
+//        {
+//            //娉ㄩ攢澶辫触
+//            NSLog(@"娉ㄩ攢澶辫触");
+//        }
+//            break;
+//    }
+//    if (errorCode == SMPC_QUICK_SDK_ERROR_NONE) {
+//
+//    }
+//
+//}
+
+//- (void)smpcQpRechargeResult:(NSNotification *)notify{
+//    NSLog(@"鍏呭�肩粨鏋�%@",notify);
+//    NSDictionary *userInfo = notify.userInfo;
+//    int error = [[userInfo objectForKey:kSmpcQuickSDKKeyError] intValue];
+//    switch (error) {
+//        case SMPC_QUICK_SDK_ERROR_NONE:
+//        {
+//            //鍏呭�兼垚鍔�
+//            //QuickSDK璁㈠崟鍙�,cp涓嬪崟鏃朵紶鍏ョ殑璁㈠崟鍙凤紝娓犻亾sdk鐨勮鍗曞彿锛宑p涓嬪崟鏃朵紶鍏ョ殑鎵╁睍鍙傛暟
+//            NSString *orderID = userInfo[kSmpcQuickSDKKeyOrderId];
+//            NSString *cpOrderID = userInfo[kSmpcQuickSDKKeyCpOrderId];
+//            NSLog(@"鍏呭�兼垚鍔熸暟鎹細%@,%@",orderID,cpOrderID);
+//            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+//                                   [NSNumber numberWithInt:S2U_FreePlatformPayOk], @"code", nil];
+//            [self SendMessageToUnity:_dict];
+//        }
+//            break;
+//        case SMPC_QUICK_SDK_ERROR_RECHARGE_CANCELLED:
+//        case SMPC_QUICK_SDK_ERROR_RECHARGE_FAILED:
+//        {
+//            //鍏呭�煎け璐�
+//            NSString *orderID = userInfo[kSmpcQuickSDKKeyOrderId];
+//            NSString *cpOrderID = userInfo[kSmpcQuickSDKKeyCpOrderId];
+//            NSLog(@"鍏呭�煎け璐ユ暟鎹�%@,%@",orderID,cpOrderID);
+//            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+//                                   [NSNumber numberWithInt:S2U_FreePlatformPayFail], @"code", nil];
+//            [self SendMessageToUnity:_dict];
+//        }
+//            break;
+//        default:
+//            break;
+//    }
+//}
+
+-(id) APNativeJSONObject:(NSData *)data{
+    if (!data) {
+        return nil;
+    }
+    
+    NSError *error = nil;
+    id retId = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
+    
+    if (error) {
+        NSLog(@"%s trans data to obj with error: %@", __func__, error);
+        return nil;
+    }
+    
+    return retId;
+}
+
+-(void)HandleUnityMessage:(NSString *)json {
+    
+    NSLog(@"鏀跺埌Unity鍙戞潵鐨勬秷鎭� => %@", json);
+    
+    NSData *_jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
+    NSDictionary *_dict = [self APNativeJSONObject:_jsonData];
+    
+    switch([[_dict objectForKey:@"code"] intValue]){
+        case U2S_Init:
+            sAppID = _dict[@"appID"];
+            sGameID = _dict[@"gameID"];
+            [self Init];
+
+            break;
+        case U2S_CopyContent:
+            [UIPasteboard generalPasteboard].string = _dict[@"content"];
+            break;
+        case U2S_FreePlatformInit:
+            break;
+        case U2S_MakeKeyAndVisible:
+        {
+            UIWindow * _window = [[UIApplication sharedApplication].delegate window];
+            if (_window != nil && _window.rootViewController != nil) {
+                [_window makeKeyAndVisible];
+            }
+        }
+            break;
+        case U2S_OpenWebView:
+            [self OpenURL:_dict[@"url"]];
+            break;
+        case U2S_FreePlatformLogin:
+        {
+            [MYSDK loadLoginViewResultSuccess:^(NSString *logintime, NSString *userName, NSString *sign) {
+                NSLog(@" 鐧婚檰鍙傛暟锛氥��%@ %@ %@銆�", userName, logintime, sign);
+                
+                NSString *uid = userName;
+                NSString *gameUID = [NSString stringWithFormat:@"%@@9998", uid];
+                NSString *UserName = userName;
+
+                
+                NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                       [NSDictionary dictionaryWithObjectsAndKeys:sign, @"token",
+                                        UserName, @"userName",
+                                        gameUID, @"account", nil],@"info",
+                                       [NSNumber numberWithInt:S2U_FreePlatformLoginOk], @"code", nil];
+                [self SendMessageToUnity:_dict];
+            } failed:^(NSInteger code, NSString *message) {
+                NSLog(@"鐧诲綍澶辫触 %ld, %@", code, message);
+            }];
+        }
+            break;
+        case U2S_FreePlatformLogout:
+        {
+            [MYSDK LoginOut];
+        }
+            break;
+        case U2S_CreateRole:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            
+            [MYSDK SetUserInfoDataWithRoleId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]]
+                                    roleName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]]
+                                   roleLevel:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]]
+                                      zoneId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]
+                                    zoneName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]]
+                                      attach:@"" block:^(NSInteger code) {
+                NSLog(@"code = %li",(long)code);
+            }];
+            break;
+        }
+        case U2S_RoleLogin:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            [MYSDK SetUserInfoDataWithRoleId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]]
+                                    roleName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]]
+                                   roleLevel:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]]
+                                      zoneId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]
+                                    zoneName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]]
+                                      attach:@"" block:^(NSInteger code) {
+                NSLog(@"code = %li",(long)code);
+            }];
+            break;
+        }
+            
+        case U2S_RoleLevelUp:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            [MYSDK SetUserInfoDataWithRoleId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]]
+                                    roleName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]]
+                                   roleLevel:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]]
+                                      zoneId:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]
+                                    zoneName:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]]
+                                      attach:@"" block:^(NSInteger code) {
+                NSLog(@"code = %li",(long)code);
+            }];
+            break;
+        }
+        case U2S_FreePlatformPay:
+        {
+
+            NSString *extra = [NSString stringWithFormat:@"9998_%@_%@_%@", [NSString stringWithFormat:@"%@", [_dict objectForKey:@"orderId"]],
+                               [NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]],
+                               [NSString stringWithFormat:@"%@", [_dict objectForKey:@"cpInfo"]]];
+            
+            [MYSDK loadApplePayWithRoleid:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]]
+                                   money:[NSString stringWithFormat:@"%@", [_dict objectForKey:@"mount"]]
+                                serverid:[NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]
+                                   attach:extra
+                             productId:[NSString stringWithFormat:@"%@", [_dict objectForKey:@"cpInfo"]]
+                             productName:[NSString stringWithFormat:@"%@", [_dict objectForKey:@"title"]]
+                             productDesc:[NSString stringWithFormat:@"%@", [_dict objectForKey:@"title"]]
+                               completion:^(IAPPurchType type,NSString *data) {
+                            //鍏呭�兼垚鍔�
+                            //QuickSDK璁㈠崟鍙�,cp涓嬪崟鏃朵紶鍏ョ殑璁㈠崟鍙凤紝娓犻亾sdk鐨勮鍗曞彿锛宑p涓嬪崟鏃朵紶鍏ョ殑鎵╁睍鍙傛暟
+                            NSLog(@"鍏呭�艰皟鐢ㄨ繑鍥�");
+                            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                                   [NSNumber numberWithInt:S2U_FreePlatformPayOk], @"code", nil];
+                            [self SendMessageToUnity:_dict];
+                        }
+                               ];
+            
+            
+            break;
+        }
+        case U2S_BatteryListenStart:
+            if(_thread == NULL)
+            {
+                _thread = [[NSThread alloc] initWithTarget:self selector:@selector(BatteryThread) object:nil];
+                [_thread setName:@"BatteryCheck"];
+            }
+            if(![_thread isExecuting])
+            {
+                [_thread start];
+            }
+            break;
+        case U2S_BatteryListenStop:
+            break;
+    }
+}
+@end
+
+extern "C" void native_opus_init(int frequency, int bitRate, int bandMode)
+{
+    s_frequency = frequency;
+    s_bandMode = bandMode;
+    s_bitRate = bitRate;
+    s_frameSize = frequency / 100;
+}
+
+extern "C" int native_opus_encode(opus_int16 *pcm, int len, unsigned char *opus)
+{
+    int errorCode = 0;
+    opus_int32 skip = 0;
+    OpusEncoder *enc = opus_encoder_create(s_frequency, CHANNEL_NUM, OPUS_APPLICATION_VOIP, &errorCode);
+    if (OPUS_OK != errorCode) {
+        enc = NULL;
+        return -1;
+    }
+    
+    opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(s_bandMode));
+    opus_encoder_ctl(enc, OPUS_SET_BITRATE(s_bitRate));
+    opus_encoder_ctl(enc, OPUS_SET_VBR(1));
+    opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
+    opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
+    opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_SIGNAL_VOICE));
+    opus_encoder_ctl(enc, OPUS_SET_DTX(0));
+    opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(0));
+    opus_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&skip));
+    opus_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(16));
+    
+    unsigned char *rbytes = opus;
+    opus_int16 *frame = pcm;
+    int totalSize = 0;
+    while (len >= s_frameSize)
+    {
+        opus_int32 length = opus_encode(enc, frame, s_frameSize, rbytes + sizeof(char), s_bitRate);
+        rbytes[0] = length;
+        frame += s_frameSize;
+        rbytes += length + sizeof(char);
+        len -= s_frameSize;
+        totalSize += (length+1);
+    }
+    opus_encoder_destroy(enc);
+    return totalSize;
+}
+
+extern "C" int native_opus_decode(unsigned char *opus, int len, short *pcm)
+{
+    int err = 0;
+    //opus_int32 skip = 0;
+    
+    OpusDecoder *dec = opus_decoder_create(s_frequency, CHANNEL_NUM, &err);
+    if (err != OPUS_OK) {
+        dec = NULL;
+        return -1;
+    }
+    
+    while (len > 0)
+    {
+        int frame_opus_length = opus[0];
+        int length = opus_decode(dec, opus + sizeof(char), frame_opus_length, pcm, s_frameSize, 0);
+        opus += sizeof(char) + frame_opus_length;
+        pcm += s_frameSize;
+        len = len - frame_opus_length - sizeof(char);
+    }
+    opus_decoder_destroy(dec);
+    return 0;
+}

--
Gitblit v1.8.0