Exemplo n.º 1
0
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;
    }
}
Exemplo n.º 2
0
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;
		}
	}
}