BITFALL/Assets/Artists/Scripts/InGameInternet/MeChatService.cs

55 lines
1.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using BITKit;
using UnityEngine;
namespace BITFALL.InGameInternet
{
[Serializable]
public struct MeChatSingleton:IMeChatService
{
public event Action<string, string, string> OnMessageReceived
{
add => MeChatService.OnMessageReceived += value;
remove => MeChatService.OnMessageReceived -= value;
}
public void Send(string sender, string receiver, string message)
{
MeChatService.Send(sender, receiver, message);
}
}
public class MeChatService : MonoBehaviour
{
[BITCommand]
public static void MeChat(string sender, string receiver, string message)
{
Send(sender, receiver, message);
}
public static event Action<string, string, string> OnMessageReceived;
private static Queue<(string, string, string)> _queue = new();
public static void Send(string sender, string receiver, string message)
{
_queue.Enqueue((sender, receiver, message));
}
[SerializeReference, SubclassSelector] private ITicker _ticker;
private void Start()
{
_ticker.Add(OnTick);
destroyCancellationToken.Register(Dispose);
}
private void Dispose()
{
_ticker.Remove(OnTick);
}
private void OnTick(float obj)
{
if(_queue.TryDequeue(out var message))
OnMessageReceived?.Invoke(message.Item1, message.Item2, message.Item3);
}
}
}