Re: Passing a GUI handle to a socket and Postmessage back to GUI
"KW" <KW@there.com> wrote in message
news:OZqIWK$pJHA.1172@TK2MSFTNGP04.phx.gbl...
The timer problem should be trivial: One timer in the app's main window
should be sufficient. Have it call each active socket object, which
increments a counter to detect timeout.
Creating a timer in the main window: No problem.
Calling each active socket: Not sure how this would be accomplished.
The "main" window code:
void CSocketActivity::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
sockServ = new MySocket(CWnd::m_hWnd);
sockServ->Create(3000);
sockServ->Listen();
}
"MySocket" is the listener class. "CServer" is where the socket is bound.
I would need ID each client from the "CSocketActivity" window so I could
use a timer there.
Do you have any tips on how I could ID each connection from the
"CSocketActivity" window?
Your MySocket class has to create the sockets (in OnAccept), right? So you
better have a list/vector of them in there - you'll need it for several
purposes. I.e. keep track of your stuff.
You can call sockServ from CSocketActivity when the timer ticks. Make a
function in sockServ like ::TimerTick(). sockServ must have a list of all
the sockets it created and it is therefore trivial for TimerTick to iterate
through the list and call each socket. Make a function in each socket like
::TimerTick(). In that one increment that socket's timer/counter. The
timer/counter gets zeroed whenever the keep alive message is received. If
the timer/counter hits a timeout threshold you know you have lost a client.
--
Scott McPhillips [VC++ MVP]