Q&A

  • 클래스 상속에 대해, 조언좀.. 해주시길..(채팅프로그램임당..)


type

ClientBlock = class(TObject)

icbm: IpCoBaMo; // 소켓 클래스 정의 해 놓은 유닛

constructor create;

destructor destroy;

end;





일단 위의 클래스는 서버에 접속하는 클라이언트마다 에러체크를 다르게

하기 위해 선언한 클래스입니다.



메세지를 보낼때는,,

cb := ClientBlock(Socket.Data); 이런형태로 선언해 주고,

cb.icbm.Send(Socket, _msg, buf, size); 이라인을 실행시킵니다.

위 라인은 Sendtext 와 유사한 기능을 갖습니다.



제가 원하는건 저렇게 하니깐, 일대일로만 통신이 되는군여.. 일대다는

안되구..



그래서, cb 안에다가 ClientBlock(ServerSocket1.Socket.Connections[ ]); 이런형태로 넣어주기도

해보았습니다.. 근데, 안되는군여.. 메모리 번지수 에러나면서...



그러니깐,, 원래 아래와 같은 루틴을..



for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin

ServerSocket1.Socket.Connections[i].sendtext('흑흑');

end;





이런식으루 바꾸었지요.. 물론 안됩니다... -_-;;

for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin

sb := clientblock(ServerSocket1.Socket.Connections[i]);

sb.icbm.Send(Socket, _msg, buf, size);

end;



sb 아래에다가 icbm.Send 를 상속시켜 각기 다른 클라인트들에게 주루룩

보내는 방법이 있을까요?

ServerSocket1.Socket.Connections[i].sendtext('message'); 이 방법 말구요..





고수님들.. 제가 질문을 잘 못하겠는데.. 이해하시겠죠? 제가 무슨 말 하는지.. ㅜㅜ;;



혹시나 질문있으시면 하십쇼... ㅜㅜ









ps) 아래는 클라이언트들에게 메세지를 되돌려 보내주는 부분입니다.

.

.

.

.

.



procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

begin



// Socket.Data 를 뒤져보니 Pointer 값이더군여..

if Socket.Data = nil then exit;

// 접속하는 클라이언트마다 에러처리를 해주기 위해 cb 로 잡았습니다.

// 즉 Socket.Data 로 각각의 클라이언트를 알아내는거 같구여..

cb := ClientBlock(Socket.Data);



// _msg 값은 상수

case _msg of

CT_SE_CONNECT: begin

_msg := CT_SE_CONNECTOK;

cb.icbm.Send(Socket, _msg);

end;

CT_GE_TALKSEND: begin

_msg := CT_GE_TALKSENDOK;

buf := Pchar(cb.icbm.buf);

// 바로 이부분인데요..

for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin

// 이거는 Socket.sendtext('몰라몰라'); 형태와 비슷합니다.

// 그런데, Socket.sendtext 는 ServerSocket1.Socket.Connections[i].sendtext 형태로 보내주기땜에, 각각의 클라이언트로 메세지를 나눠주는게 가능하지만,, 제껀 무조건 그 cb 해당값의 클라이언트에게만,, 메세지가 가는군요...

cb.icbm.Send(Socket, _msg, buf, size);

end;

end;

.

.

.



0  COMMENTS