以下で説明するのは技術的にマルチキャストではないことは知っていますが、私がやろうとしていることについてのより良い説明が不足しています。
現在、OnExecuteを備えたTIdTCPServerがあり、着信メッセージを読み取り、応答メッセージをスレッドセーフキューに生成してから、関数を呼び出してキューをステップスルーし、メッセージをクライアントに送り返します。コードのこの部分は機能しており、クライアントがデータセットを要求できるようにします。
クライアントがサーバー上のオブジェクトを変更したときに、すべてのクライアントにこの変更を通知してもらいたいです。このコードは現在、接続ごとに各キューに通知メッセージを追加しています。私の問題は、OnExecuteがループされていないため、サーバーがクライアントからメッセージを受信するまで、キューにメッセージを送信するための呼び出しが呼び出されないことです。
OnExecuteをループさせる方法はありますか?または、メッセージをキューに入れていることがわかっている接続に対してOnExecuteをトリガーする方法はありますか?
私のプロシージャTWinSocketSessionオブジェクトには接続への参照があり、送信メッセージキューのコードが含まれています。また、キューをステップスルーしてConnection.Writeを呼び出すSendMessagesというプロシージャもあります。以下は私のOnExecuteプロシージャです。
procedure TWinServerSession.IdTCPServer1Execute(AThread: TIdPeerThread);
Var
i: Integer;
strMessage: String;
begin
//find the Socket Session for connection
for i := 0 to m_usClientCount do
begin
if m_mWinSocketSession[i]<>Nil then
if ( m_mWinSocketSession[i].Connection = Athread.Connection ) then break;
end;
//read the message
strMessage := m_mWinSocketSession[i].Connection.ReadLn(#0,25,-1);
//parse the message and populate the Queue with outgoing messages
m_mWinSocketSession[i].ParseInString(strMessage);
//send all of the outgoing messages
m_mWinSocketSession[i].SendMessages;
end;