55 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|