Q&A

  • 인디를 사용하여 채팅서버의 귓속말 기능 구현방법은요?
인디를 사용하여 채팅서버를 구축하고 있습니다.
그런데 특정IP에게만 메세지를 전달하고 싶은데,
현 접속자중 어떻게 발취하여 메세지를 전달해할지 답답하네요
어떻게 해야 합니까?..고수님의 한수 지도 바랍니다.



<!--CodeS-->
================서버 소스 ===========


procedure TChatServer_SF.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
    //현재 접속할때....정보 수집은 어떻게 해야 하는지.....


end;



procedure TChatServer_SF.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  List : TList ;
  Loop : integer ;
  stReceivedText : String ;
  IdPeerThread : TIdPeerThread ;

begin

        stReceivedText := AThread.Connection.ReadLn('',5);
        if stReceivedText = '' then exit;

        List := IdTCPServer1.Threads.LockList;
        try
            for Loop := 0 to List.Count -1 do
            begin
               IdPeerThread := TIdPeerThread(List.Items[Loop]);
      
               //현재 접속된 유저의 정보를 어떻게 비교를 해야할지..모르겠구요  
              //locklist에 정보를 어떻게 활용을 해야할지 모르겠내요...
      
              if (IdPeerThread <> nil) then
               begin
              
                  try
                     IdPeerThread.Connection.WriteLn(stReceivedText);

                  except
                     IdPeerThread.Stop ;
                  end;
               end;

            end;
        finally
            IdTCPServer1.Threads.UnlockList ;

        end;

end;
<!--CodeE-->
2  COMMENTS
  • Profile
    주웰 2005.06.02 21:58
    Client 정보를 담을 클래스를 한개 만드세요
    ClientThread: TIdPeerThread 라고 선언하시고요.
    그외에 담을 정보와 함께요.

    그리고 AThread 를 확인 해보시면 Data라는 빈공간이
    있습니다.
    AThread.Data에는 Client정보를
    Client정보 클래스에는 AThread를 서로 참조 할수
    있도록 하시고요.

    두개를 잘 활용하시면 쉽게 하실수 있을꺼 같습니다.

    예제는 많이 있습니다. 특히 네이버에
    류종택님이 운영하시는 카페에 보시면 세균맨님께서
    원하시는 정보를 꼭집어서 만든게 있을겁니다.


  • Profile
    세균맨 2005.06.03 04:12

    ㅊㅊ