связать данные с сокетом.

Тема в разделе "WASM.WIN32", создана пользователем cupuyc, 23 июл 2009.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    можно ли как-то связать с сокетом свои данные? цель следующая:
    я создаю неблокируемые сокеты и юзаю для них WSAAsyncSelect. сетевые сообщения обрабатывает класс. я хочу чтобы получив оконное сообщение можно было сразу отправить его соответствующему методу класса. для этого нужно в окнной процедуре иметь указатель на этот класс. можно, конечно, создать структуру, типа, h_socket - class_pointer, и хранить указатель на неё в глобальных переменных, но мне не оч нравится такой способ.
     
  2. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Если чесно... я НИКУЯ не понял!
     
  3. LLInuoH

    LLInuoH New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2006
    Сообщения:
    15
    объяви указатель как static в оконной процедуре если это возможно...
     
  4. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    должно быть, типа так:

    Код (Text):
    1. CNetworkHandler::CNetworkHandler()
    2. {
    3.  SetSocketData(h_socket, this);
    4.  WSAAsyncSelect(h_socket, hwnd, WM_SOCKET_MSG, ...);
    5. }
    6.  
    7. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
    8. {
    9.  swicth (msg)
    10.  {
    11.   case WM_SOCKET_MSG:
    12.   {
    13.    CNetworkHandler *p = (CNetworkHandler*)GetSocketData(h_socket);
    14.    p->OnMsg(lp);
    15.    ...
    16.   }
    17.   ...
    18.  }
    19. }
    соответственно нужны функции SetSocketData() и GetSocketData(). Есть ли такое в природе или нужно извращаться - заводить массив связей сокетов с указателями, сохранять где-нибудь указатель на массив (например SetWindowLongPtr(...GWLP_USERDATA, ...)), производить выборку и т.п.?