233 lines
6.4 KiB
C#
233 lines
6.4 KiB
C#
using UnityEngine;
|
||
using System.Collections;
|
||
using Games.ChatHistory;
|
||
using GCGame;
|
||
using GCGame.Table;
|
||
using System;
|
||
using Games.GlobeDefine;
|
||
using Module.Log;
|
||
|
||
public class ChatVoiceInputLogic : UIControllerBase<ChatVoiceInputLogic>
|
||
{
|
||
public static bool InputVoice(GC_CHAT.CHATTYPE chatCannel = GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID)
|
||
{
|
||
_ChatCannel = chatCannel;
|
||
UIManager.ShowUI(UIInfo.ChatVoiceInputRoot);
|
||
return true;
|
||
//#if UNITY_ANDROID && UNITY_2018
|
||
// if (UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.Microphone))
|
||
// {
|
||
//#elif UNITY_ANDROID
|
||
// if (PlatformHelper.requstePremission("android.permission.RECORD_AUDIO"))
|
||
// {
|
||
//#endif
|
||
// UIManager.ShowUI(UIInfo.ChatVoiceInputRoot);
|
||
// return true;
|
||
//#if UNITY_ANDROID && UNITY_2018
|
||
// }
|
||
// else
|
||
// {
|
||
// UnityEngine.Android.Permission.RequestUserPermission(UnityEngine.Android.Permission.Microphone);
|
||
// return false;
|
||
// }
|
||
//#elif UNITY_ANDROID
|
||
// }
|
||
// else
|
||
// {
|
||
// return false;
|
||
// }
|
||
//#endif
|
||
|
||
}
|
||
|
||
public static void StopVoice()
|
||
{
|
||
if (!ChatVoiceInputLogic.Instance())
|
||
return;
|
||
|
||
ChatVoiceInputLogic.Instance().StopInputVoice();
|
||
}
|
||
|
||
public static void CancelVoiceSlider()
|
||
{
|
||
if (!ChatVoiceInputLogic.Instance())
|
||
return;
|
||
|
||
ChatVoiceInputLogic.Instance().CancelSlider();
|
||
}
|
||
|
||
public static void CancelVoiceKeyUp()
|
||
{
|
||
if (!ChatVoiceInputLogic.Instance())
|
||
return;
|
||
|
||
ChatVoiceInputLogic.Instance().CancelKeyUp();
|
||
}
|
||
|
||
public void OnEnable()
|
||
{
|
||
SetInstance(this);
|
||
StartInputVoice();
|
||
}
|
||
|
||
public void OnDisable()
|
||
{
|
||
SetInstance(null);
|
||
}
|
||
|
||
public void Update()
|
||
{
|
||
|
||
UpdateVolumn();
|
||
}
|
||
|
||
#region
|
||
|
||
public GameObject _VoicePanel;
|
||
public GameObject _CancelPanel;
|
||
public GameObject[] _VolumnGOs;
|
||
|
||
private ChatInputLogic _InputLogic;
|
||
private static GC_CHAT.CHATTYPE _ChatCannel = GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID;
|
||
private bool _Inputing = false;
|
||
|
||
private static int _CharCnt = 72;
|
||
|
||
public void StartInputVoice()
|
||
{
|
||
if (ChatInputLogic.Instance() && ChatInputLogic.Instance().gameObject.activeSelf)
|
||
{
|
||
_InputLogic = ChatInputLogic.Instance();
|
||
}
|
||
else if(FriendAndMailRoot.Instance() && FriendAndMailRoot.Instance().gameObject.activeSelf)
|
||
{
|
||
_InputLogic = FriendAndMailRoot.Instance()._FriendRootLogic._ChatInputLogic;
|
||
}
|
||
_VoicePanel.SetActive(true);
|
||
_CancelPanel.SetActive(false);
|
||
|
||
ChatVoice.Instance().ChatVoiceStartRecord();
|
||
|
||
//ChatVoice.Instance().ChatVoiceStartRecord();
|
||
|
||
_Inputing = true;
|
||
|
||
}
|
||
|
||
public void StopInputVoice()
|
||
{
|
||
UIManager.CloseUI(UIInfo.ChatVoiceInputRoot);
|
||
|
||
Hashtable hash = new Hashtable();
|
||
hash.Add("Channel", (int)_ChatCannel);
|
||
ChatVoice.Instance().ChatVoiceFinishRecord(SendChatMsg, hash);
|
||
|
||
_Inputing = false;
|
||
}
|
||
|
||
public void CancelSlider()
|
||
{
|
||
_VoicePanel.SetActive(false);
|
||
_CancelPanel.SetActive(true);
|
||
}
|
||
|
||
public void CancelKeyUp()
|
||
{
|
||
UIManager.CloseUI(UIInfo.ChatVoiceInputRoot);
|
||
|
||
|
||
ChatVoice.Instance().ChatVoiceStopRecord();
|
||
|
||
}
|
||
|
||
public void UpdateVolumn()
|
||
{
|
||
if (!_Inputing)
|
||
return;
|
||
|
||
for (int i = 0; i < _VolumnGOs.Length; ++i)
|
||
{
|
||
if (i < ChatVoice.Instance()._VoiceVolume)
|
||
{
|
||
_VolumnGOs[i].SetActive(true);
|
||
}
|
||
else
|
||
{
|
||
_VolumnGOs[i].SetActive(false);
|
||
}
|
||
}
|
||
Debug.Log("UpdateVolumn:" + ChatVoice.Instance()._VoiceVolume);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region send msg
|
||
|
||
private static string _ChatMsg = "#[9,{0},{1},{2}]";
|
||
public static string _VoiceChatStart = "#[9";
|
||
public static char _VoiceChatEnd = ']';
|
||
|
||
public void SendChatMsg(string voiceUrl, string voiceText, float chatTime, string errorMsg, Hashtable hashParam)
|
||
{
|
||
int channel = (int)hashParam["Channel"];
|
||
LogModule.DebugLog("chatvoicelog:" + voiceText + " ,time:" + chatTime);
|
||
|
||
string chatText = voiceText.Trim(' ').Trim(',').Trim(',');
|
||
chatText = chatText.Replace(",", ",");
|
||
if (!string.IsNullOrEmpty(errorMsg))
|
||
{
|
||
GUIData.AddNotifyData(errorMsg);
|
||
return;
|
||
}
|
||
|
||
//没有错误,但是没有语音数据,提示权限错误
|
||
if (string.IsNullOrEmpty(voiceText))
|
||
{
|
||
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{39050}"));
|
||
return;
|
||
}
|
||
|
||
//if (!ChatInputLogic.IsCanChat(channel, true))
|
||
// return;
|
||
|
||
//if (voiceUrl.Length + chatText.Length + 10 > _CharCnt)
|
||
//{
|
||
// chatText = chatText.Substring(0, _CharCnt - voiceUrl.Length - 10 - 3);
|
||
// chatText += "...";
|
||
//}
|
||
|
||
ChatHistoryItem item = new ChatHistoryItem();
|
||
item.CleanUp();
|
||
if ((GC_CHAT.CHATTYPE)channel == GC_CHAT.CHATTYPE.CHAT_TYPE_FRIEND)
|
||
{
|
||
item.EChannel = (GC_CHAT.CHATTYPE)channel;
|
||
item.ReceiverGuid = _InputLogic.FriendChatReceiverGuid;
|
||
item.ReceiverName = _InputLogic.FriendChatReceiverName;
|
||
}
|
||
else if ((GC_CHAT.CHATTYPE)channel != GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID)
|
||
{
|
||
item.EChannel = (GC_CHAT.CHATTYPE)channel;
|
||
}
|
||
else
|
||
{
|
||
item.EChannel = (GC_CHAT.CHATTYPE)_InputLogic.GetCurChannelType();
|
||
item.ReceiverGuid = _InputLogic.FriendChatReceiverGuid;
|
||
item.ReceiverName = _InputLogic.FriendChatReceiverName;
|
||
}
|
||
|
||
item.ChatInfo = string.Format(_ChatMsg, voiceUrl, Mathf.CeilToInt(chatTime), chatText);
|
||
GuiTextDebug.debug("SendMsg:" + item.ChatInfo);
|
||
if (item.ReceiverGuid != GlobeVar.INVALID_GUID)
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.ChatHistory.IsNeedInsertTime(item.ReceiverGuid))
|
||
{
|
||
item.SetSendMsgTime();
|
||
}
|
||
}
|
||
Utils.SendCGChatPak(item.ChatInfo, item);
|
||
|
||
}
|
||
|
||
#endregion
|
||
}
|