Unity/Network

Unity Network - Multi Thread

우대비 2022. 6. 24. 21:34
반응형

작업스레드로 유니티엔진의 메인 로직에 접근하는것은 불가능함

유니티에서 대부분의 연산은 메인스레드가 처리해야 하기 때문에 Packet을 전송할때에도

MainThread에서 실행되게끔 설계해야함

public class NetworkManager : MonoBehaviour
{
    ServerSession _session = new ServerSession();

    void Start()
    {
        string host = Dns.GetHostName();
        IPHostEntry ipHost = Dns.GetHostEntry(host);
        IPAddress ipAddr = ipHost.AddressList[0];
        IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777);

        Connector connector = new Connector();

        connector.Connect(
            endPoint, () => { return _session; }, 1);

        StartCoroutine("CoSendPacket");

    }
    void Update()
    {
        IPacket packet = PacketQueue.Instace.Pop();
        if (packet != null)
        {
            PacketManager.Instance.HandlePacket(_session, packet);
        }
    }
    IEnumerator CoSendPacket()
    {
        while (true)
        {
            yield return new WaitForSeconds(3.0f);

            C_Chat chatPacket = new C_Chat();
            chatPacket.chat = "Hello Unity !";
            ArraySegment<byte> segment = chatPacket.Write();

            _session.Send(segment);
        }
    }
}
반응형
LIST