09/04/03
WSAAsyncSelect인줄 알았는데 사용하는 함수가 없다.
select로만 하는것이다.
thread하나 만들어서 select를 계속 돌면서 메시지를 검사한다..
그러다가 메인폼으로 PostMessage를 이용해서 Msg를 넘기는 것 같다.
일단 어디서 어떤식으로 Msg를 넘기는지 알아봐야할 것이다.
lparam과 wparam에도 뭐가 들어가는지도 함께..
wParam에는 콜백함수 포인터인것 같다.
lParam은 상위16bit와 하위16bit를 나눠서 쓰는것 같다.
예상되는 방식..
lParam = [MsgNo] [MsgType]
enum MsgType{
Manager = 4,
?? = 5,
?? = 6,
World = 8,
}
메시지가 4,5,6,8번이 있는것으로 확인됐다.
각각 용도는 앞으로 찾아봐야할것이다.
최초 접속 시도 및 모든 패킷의 처음 type부분이 잘못 된것 같다.
recv할때 맨앞에 1byte만 가지고 type을 체크하는 것이다.
어떻게 1byte를 recv했는데 다음 recv할때부터 제대로된 패킷이 들어오는지 이해가 안간다.. Flag옵션과 관계있을지도..
=> 플래그 옵션이 맞다. MSG_PEEK가 걸려있었다. 패킷이 들어있는지만 확인 하는것이다.
if(ax != bx || size == 4)
{
if(ax != 0xF)
{
if(size != 0x1FFC)
{
ecx = [esi+eax*4+40];
if(ecx != ebx)
{
if(ax == bx)
{
}
}
else
{
}
}
}
if(size == 4 && type == 0) {
ProcessControlMessage(TConnection)
} else {
ProcessPacket
}
- 최초 접속 시도
[C->S] [type]0000 [size]0004 [data]01 00 01 00
[2byte:FLEAF_PKT.CONNECT] [2byte:Pkt Length] [01 00] [01 00]
[S->C] [02 00] [01 00]
History
Last edited on 04/03/2009 18:08 by skyilover
Comments (0)