#if !DISABLE_PLUGIN
using UnityEngine;
using System.Collections;
using System;
using XUtliPoolLib;
//using com.tencent.gsdk;
using System.IO;
using System.Text;
public class ApolloManager : MonoBehaviour, IApolloManager
{
#if APOLLO
private static CApolloVoiceSys ApolloVoiceMgr = null;
static bool m_bCreateEngine = false;
private string mAppID = string.Empty;
private string mOpenID = string.Empty;
#endif
private bool _openMusic = true;
private bool _openSpeak = true;
public static ApolloManager sington = null;
public static byte[] m_strFileID = new byte[1024];
void Awake()
{
sington = this;
}
void OnDestroy()
{
sington = null;
}
void Start()
{
// InitGSDK("1105309683");
}
///
/// sdk speak表示打开或者关闭其他玩家说话
///
public bool openMusic
{
get { return _openMusic; }
set
{
_openMusic = value;
#if APOLLO
ApolloVoiceErr VoiceErr = value ? (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._OpenSpeaker()
: (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._CloseSpeaker();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("openMusic Succ {0}", value));
}
else
{
string text = string.Format("openMusic Err is {0}", VoiceErr);
Debug.Log(text);
}
#endif
}
}
///
/// sdk music代表打开或者关闭自己说话
///
public bool openSpeak
{
get { return _openSpeak; }
set
{
_openSpeak = value;
#if APOLLO
ApolloVoiceErr VoiceErr = value ? (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._OpenMic()
: (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._CloseMic();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("openSpeak Succ {0}", value));
}
else
{
string text = string.Format("openSpeak Err is {0}", VoiceErr);
Debug.Log(text);
}
#endif
}
}
public void Init(int platf, string openid)
{
#if APOLLO
mAppID = "guest100023";
#if UNITY_EDITOR
mAppID = "1105309683";
openid = "63662733";
#endif
if (platf == 3) mAppID = "1105309683";
else if (platf == 4) mAppID = "wxfdab5af74990787a";
mOpenID = openid;
//SetGSDKUserName(platf, openid);
if (ApolloVoiceMgr != null)
{
Debug.Log("ApolloVoiceMgr Created");
}
else
{
ApolloVoiceMgr = new CApolloVoiceSys();
ApolloVoiceMgr.SysInitial();
}
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._CreateApolloVoiceEngine(mAppID, openid);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog("CreateApolloVoiceEngine Succ");
}
else
{
string text = string.Format("CreateApolloVoiceEngine Err is {0}", VoiceErr);
Debug.Log(text);
}
}
#if Publish
ApolloVoiceMgr.CallApolloVoiceSDK._EnableLog(false);
#endif
#endif
}
public void SetRealtimeMode()
{
#if APOLLO
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._SetMode(0);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog("apollo _SetMode Succ");
}
else
{
string text = string.Format("apollo _SetMode Err is {0}", VoiceErr);
Debug.Log(text);
}
}
#endif
}
public void Capture(bool capture)
{
#if APOLLO&&!UNITY_EDITOR && !UNITY_STANDALONE_WIN
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._CaptureMicrophone(capture);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
Debug.Log("apollo capture Succ");
}
else
{
string text = string.Format("apollo capture Err is {0}", VoiceErr);
Debug.Log(text);
}
#endif
}
///
/// 禁止成员声音
///
///
///
public void ForbitMember(int memberId, bool bEnable)
{
#if APOLLO
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._ForbidMemberVoice(memberId, bEnable);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog("ForbitMember Succ");
}
else
{
string text = string.Format("ForbitMember Err is {0}", VoiceErr);
Debug.Log(text);
}
}
#endif
}
///
/// 获取说话成员信息
///
///
///
public int[] GetMembersState(ref int size)
{
int[] memberState = new int[32];
#if APOLLO
size = ApolloManager.ApolloVoiceMgr.CallApolloVoiceSDK._GetMemberState(memberState);
#endif
return memberState;
}
///
/// 加入小房间
///
public void JoinRoom(string url1, string url2, string url3, Int64 roomId, Int64 roomKey, short memberId)
{
#if APOLLO
if (string.IsNullOrEmpty(mOpenID)) { Debug.LogError("openid is nil"); return; }
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._JoinRoom(url1, url2, url3, roomId, roomKey, memberId, mOpenID, 45000);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("JoinRoom Succ {0} {1} {2} {3} {4} {5}", roomId, roomKey, memberId, url1, url2, url3));
}
else
{
string text = string.Format("JoinRoom Err is {0}", VoiceErr);
Debug.Log(text);
}
#endif
}
///
/// 加入大房间
///
/// 大房间url
/// 0 主播(最多五人), 1 观众
/// 后台传递过来的业务ID
public void JoinBigRoom(string urls, int role, uint busniessID, Int64 roomid, Int64 roomkey, short memberid)
{
#if APOLLO
if (string.IsNullOrEmpty(mOpenID)) { Debug.LogError("openid is nil"); return; }
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._JoinBigRoom(urls, role, busniessID, roomid, roomkey, memberid, mOpenID, 45000);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("_JoinBigRoom Succ {0} {1} {2} {3} {4} {5}", roomid, roomkey, urls, role, busniessID, memberid));
}
else
{
string text = string.Format("_JoinBigRoom Err is {0}", VoiceErr);
Debug.Log(text);
}
#endif
}
public bool GetJoinRoomResult()
{
bool isInRoom = false;
#if APOLLO
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._GetJoinRoomResult();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_JOIN_SUCC)
{
isInRoom = true;
XDebug.singleton.AddLog("Apollo GetJoinRoomResult Succ");
}
else
{
string text = string.Format("Apollo GetJoinRoomResult is {0}", VoiceErr);
Debug.Log(text);
}
}
#endif
return isInRoom;
}
public bool GetJoinRoomBigResult()
{
bool isInRoom = false;
#if APOLLO
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._GetJoinRoomBigResult();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_JOIN_SUCC)
{
isInRoom = true;
XDebug.singleton.AddLog("Apollo _GetJoinRoomBigResult Succ");
}
else
{
string text = string.Format("Apollo _GetJoinRoomBigResult is {0}", VoiceErr);
XDebug.singleton.AddLog(text);
}
}
#endif
return isInRoom;
}
///
/// 退出小房间
///
///
///
public void QuitRoom(Int64 roomId, short memberId)
{
#if APOLLO
if (string.IsNullOrEmpty(mOpenID)) { Debug.LogError("openid is nil"); return; }
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._QuitRoom(roomId, memberId, mOpenID);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("QuitRoom Succ {0} {1}", roomId, memberId));
}
else
{
string text = string.Format("QuitRoom Err is {0}", VoiceErr);
XDebug.singleton.AddLog(text);
}
#endif
}
///
/// 退出大房间
///
public void QuitBigRoom()
{
#if APOLLO
if (string.IsNullOrEmpty(mOpenID)) { Debug.LogError("openid is nil"); return; }
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._QuitBigRoom();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("QuitBigRoom!"));
}
else
{
string text = string.Format("QuitBigRoom Err is {0}", VoiceErr);
XDebug.singleton.AddLog(text);
}
#endif
}
///
/// 获取麦克音量
///
public int GetSpeakerVolume()
{
#if APOLLO
if (ApolloVoiceMgr != null)
{
return ApolloVoiceMgr.CallApolloVoiceSDK._GetMicLevel();
}
#endif
return 100;
}
///
/// 设置背景音乐的大小
///
///
public void SetMusicVolum(int nVol)
{
#if APOLLO
if (ApolloVoiceMgr != null)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._SetSpeakerVolume(nVol);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("SetMusicVolum Succ {0}", nVol));
}
else
{
string text = string.Format("SetMusicVolum Err is {0}", VoiceErr);
XDebug.singleton.AddLog(text);
}
}
#endif
}
void OnApplicationPause(bool pause)
{
#if APOLLO
XDebug.singleton.AddLog("apollo puase: " + pause + " mgr: " + (ApolloVoiceMgr != null));
if (ApolloVoiceMgr != null)
{
if (pause)
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._Pause();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
XDebug.singleton.AddLog(string.Format("OnApplicationPause pause true Succ"));
}
else
{
string text = string.Format("OnApplicationPause Err is {0}", VoiceErr);
Debug.Log(text);
}
}
else
{
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._Resume();
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
m_bCreateEngine = true;
Debug.Log(string.Format("OnApplicationPause pause false Succ"));
}
else
{
string text = string.Format("OnApplicationPause Err is {0}", VoiceErr);
Debug.Log(text);
}
}
}
#endif
}
public int InitApolloEngine(int ip1, int ip2, int ip3, int ip4, byte[] key, int len)
{
#if APOLLO
//int res = ApolloVoiceMgr.CallApolloVoiceSDK._SetMode(2);
//if (res != 0)
// return res;
ApolloVoiceMgr.CallApolloVoiceSDK._SetServiceInfo(ip1, ip2, ip3, ip4, 80, 60000);
return ApolloVoiceMgr.CallApolloVoiceSDK._SetAuthkey(key, len);
#else
return 0;
#endif
}
public int StartRecord(string filename)
{
#if APOLLO
string path = Application.persistentDataPath + "/" + filename;
return ApolloVoiceMgr.CallApolloVoiceSDK._StartRecord(path);
#else
return 0;
#endif
}
public int StopApolloRecord()
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._StopRecord(true) : 0;
#else
return 0;
#endif
}
public int GetApolloUploadStatus()
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._GetVoiceUploadState() : 0;
#else
return 0;
#endif
}
public int UploadRecordFile(string filename)
{
#if APOLLO
#if UNITY_EDITOR
string path = Application.persistentDataPath + "/record.sound";
return 0;
#else
string path = Application.persistentDataPath + "/" + filename;
byte[] filebyte = File.ReadAllBytes(path);
return ApolloVoiceMgr.CallApolloVoiceSDK._SendRecFile(path);
#endif
#else
return 0;
#endif
}
public string GetFileID()
{
#if APOLLO
ApolloVoiceErr VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._GetVoiceUploadState();
if (VoiceErr != ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
return "";
}
VoiceErr = (ApolloVoiceErr)ApolloVoiceMgr.CallApolloVoiceSDK._GetFileID(m_strFileID);
if (VoiceErr == ApolloVoiceErr.APOLLO_VOICE_SUCC)
{
return Encoding.Default.GetString(m_strFileID);
}
else
{
return "";
}
#else
return "";
#endif
}
public int GetMicLevel()
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._GetMicLevel() : 0;
#else
return 0;
#endif
}
public int StartPlayVoice(string filepath)
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._PlayFile(filepath) : 0;
#else
return 0;
#endif
}
public int StopPlayVoice()
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._StopPlayFile() : 0;
#else
return 0;
#endif
}
public int SetApolloMode(int mode)
{
#if APOLLO
return ApolloVoiceMgr != null ? ApolloVoiceMgr.CallApolloVoiceSDK._SetMode(mode) : 0;
#else
return 0;
#endif
}
}
#endif