62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Diagnostics;
|
|
using UnityEngine;
|
|
|
|
namespace HC
|
|
{
|
|
public class SensitiveManager : HCSingleton<SensitiveManager>
|
|
{
|
|
private TrieNode _root;
|
|
|
|
public void InitializeSdk()
|
|
{
|
|
StartCoroutine(InitializeTrieNode());
|
|
}
|
|
|
|
private IEnumerator InitializeTrieNode()
|
|
{
|
|
_root = new TrieNode();
|
|
var sensitiveWordsFile = Resources.Load<TextAsset>("sensitivewords");
|
|
var sensitiveWords = sensitiveWordsFile.text.Split('\n');
|
|
yield return _root.Initialize(sensitiveWords, () => { HCDebugger.LogDebug("TrieNode initialization complete."); });
|
|
}
|
|
|
|
public void CheckSensitiveWords(string text, SensitiveType type, Action<SensitiveCheckResult> action)
|
|
{
|
|
StartCoroutine(FilterText(text, type, (filteredText, checkSource) =>
|
|
{
|
|
// 在回调函数中处理过滤后的文本
|
|
var result = new SensitiveCheckResult
|
|
{
|
|
HasSensitive = !text.Equals(filteredText),
|
|
Text = filteredText,
|
|
CheckSource = checkSource
|
|
};
|
|
|
|
HCDebugger.LogDebug($"[CheckSensitiveWords] inputText = {text} type = {type} outText = {result.Text} HasSensitive = {result.HasSensitive} checkSource = {result.CheckSource}");
|
|
// 调用传入的回调函数,将结果返回
|
|
action(result);
|
|
}));
|
|
}
|
|
|
|
|
|
private IEnumerator FilterText(string inputText, SensitiveType type, Action<string, CheckSource> callback)
|
|
{
|
|
// 先从本地查
|
|
var filteredText = _root.FilterText(inputText);
|
|
if (inputText.Equals(filteredText))
|
|
{
|
|
// 服务器校验,并把文本内容传递出去,如果服务器请求失败了,那么直接用原文本发送
|
|
HCServer.Instance.CheckSensitiveWords((int)type, inputText, (code, msg, censorTextResult) => { callback(code != 0 ? filteredText : censorTextResult.content, code != 0 ? CheckSource.ServerError : CheckSource.Server); });
|
|
}
|
|
else
|
|
{
|
|
// 本地已经被修改了文本内容了,直接给返回去了
|
|
callback(filteredText, CheckSource.Local);
|
|
}
|
|
|
|
yield return null;
|
|
}
|
|
}
|
|
} |