void FaceView::fireNotification(const Notification& note) const { // owner ID 0 means, it is owned by this application, no need to notify if(note.getOwnerID() == 0) return; wxSocketBase* sock = 0; SocketIDHashMap::const_iterator it = m_SocketIdHash.begin(); while(it != m_SocketIdHash.end()) { if(it->second == note.getOwnerID()) { sock = (wxSocketBase*)it->first; std::string xml_note = XMLUtils::xmlify(note); sock->SaveState(); NotificationSenderThread* pThread = new NotificationSenderThread(sock, xml_note); pThread->Create(); pThread->Run(); sock->RestoreState(); break; } ++it; } }
void ControlPanel::OnSocketEvent(wxSocketEvent& event) { switch(event.GetSocketEvent()) { case wxSOCKET_CONNECTION : break; case wxSOCKET_LOST : wxLogMessage(_T("Connection to server lost!")); Connection(false); break; case wxSOCKET_INPUT: // gets only notifications { // We disable input events, so that the test doesn't trigger // wxSocketEvent again. m_pSocket->SetNotify(wxSOCKET_LOST_FLAG); // get data wxString msg = ReadFromSocket(m_pSocket); // translate it to notification Notification note = XMLUtils::xmlToNotification((const char*)msg.c_str()); if(note.getName() == "CONNECTION_OK") { m_clientId = note.getOwnerID(); m_bConnected = true; wxLogMessage(_T("Connected successfully to server with ClientID %d."), m_clientId); } else onNotification(note); // Enable input events again. m_pSocket->SetNotify(wxSOCKET_LOST_FLAG | wxSOCKET_INPUT_FLAG); break; } } }