0

別のスレッドで UDP データを受信するためのメソッドを含むクラスがあります。これは、メイン アプリケーション (Unity3D で実行されている) が停止しないようにするためです。

別のスレッドで受信したデータを別のクラスに渡す必要があります。別のクラスは元のスレッドで実行されるため、Unity3D と対話できます。

UDPReceiver は大まかに次のようになります。

public class UDPReciever {

    //...

    public UDPReciever() {
        m_Port = 12345;
        m_Worker = new Thread(new ThreadStart(recvData));
        m_Worker.IsBackground = true;
        m_Worker.Start();
    }

    void recvData() {
        m_UDPClient = new UdpClient(m_Port);
        while (true) {
            try {
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
                byte[] data = (m_UDPClient.Receive(ref anyIP));  

                // TODO: Hand 'data' to NetworkController class (running in the original thread) for processing

            } catch (Exception err) {
                    print(err.ToString());
            }
        }
    }   

}

これはおおよそ、NetworkController クラスがどのように見える必要があるかです。理想的には、「OnNewData」メソッドは、引数として渡されたデータで新しいパケットが受信されるたびに呼び出されます。

public class NetworkController {

    //...

    void OnNewData(pData) {
        // Process the data in this thread
    }

}

これを達成するにはどうすればよいですか?前もって感謝します。

4

1 に答える 1