C# で Instant Messenger サーバーを作成する必要があります。サーバーは ConsoleApplication プロジェクトです。そして、3スレッドで動くサーバーを作りたいです。以下のコードで説明します。
問題は、別のスレッドから関数を呼び出す方法、または別のスレッドでイベントを作成する方法です。
これはメインのサーバー クラスです。
public class GiNetServer
{
public void Start()
{
netServer = new NetServer();
msgHandler = new NetMsgHandler();
netServer.NewNetMsg += msgHandler.HandleMsg;
Work();
}
private void Work()
{
while(true) //This runs in the MainThread
sleep(1);
}
}
NetServer クラスは、acceptClientsThread と receiveMessagesThread の 2 つのスレッドを作成します。受信スレッドは NewNetMsg を呼び出します。
public class NetServer
{
public event NewNetMsgEventHandler NewNetMsg;
public NetServer()
{
acceptClientsThread = new Thread(ListenForClients);
receiveMessageThread = new Thread(Receive);
//and of course starts them here...
}
private void Receive()
{
while(true)
{
Heartbeat();
}
}
private void Heartbeat()
{
foreach(netClient in clientsList)
{
if (netClient.DataAvalible)
{
netClient.Recive();
}
if (!netClient.IsBufferEmpty())
{
nextMsg = netClient.NextMessage();
if (nextMsg != null)
NewNetMsg(netClient, nextMsg); //Call the event!
}
}
}
}
msgHandler.HandleMsg 関数を別のスレッドまたは MainThread で実行するにはどうすればよいですか?
このように、HandleMsg は receiveMessagesThread で実行されます。
上記のコードは疑似コードっぽいです。不明な点があれば教えてください。