Exemplo n.º 1
0
void G2Node::OnPacketHeader(const bs::error_code& err)
{
    if(closed_) return;

    if(!err)
    {
        assert(g2buffer_.size() > 0);
        rawPacket_.insert(rawPacket_.end(), g2buffer_.begin(), g2buffer_.end());
        G2::Header hd;
        try {
            hd.Decode(&rawPacket_[0], rawPacket_.size());
        }
        catch( std::exception& e)
        {
            ReadPacket();
            return;
        }

        if(hd.dataSize > 0)
        {
            g2buffer_.resize(hd.dataSize);
            ba::async_read(*pSocket_, ba::buffer(g2buffer_), ba::transfer_all(),
                           boost::bind(&G2Node::OnPayload, shared_from_this(), ba::placeholders::error));
        }
        else HandlePacket();
    }
    else if(err != ba::error::operation_aborted)
    {
        System::LogDev() << "G2Node::OnPacketHeader " << myInfo_.endpoint.ToString() << " " << err.message() << std::endl;
        DetachMe();
    }
}
Exemplo n.º 2
0
void G2Node::OnPayload(const bs::error_code& err)
{
    if(closed_) return;

    if(!err)
    {
        rawPacket_.insert(rawPacket_.end(), g2buffer_.begin(), g2buffer_.end());
        HandlePacket();
    }
    else if(err != ba::error::operation_aborted)
    {
        System::LogDev() << "G2Node::OnPayload " << myInfo_.endpoint.ToString() << " " << err.message() << std::endl;
        DetachMe();
    }
}
Exemplo n.º 3
0
void G2Node::OnPacketSent(const bs::error_code& err)
{
    if(closed_) return;

    if(!err)
    {
        packetBuf_.clear();
        dispatchQueue_.pop();
        if(!dispatchQueue_.empty()) SendPackets();
    }
    else if(err != ba::error::operation_aborted)
    {
        System::LogDev() << "G2Node::OnPacketSent " << myInfo_.endpoint.ToString() << " " << err.message() << std::endl;
        DetachMe();
    }
}
Exemplo n.º 4
0
void G2Node::OnTimer()
{
    if(System::Since(timestamp_) > ALIVE_TIMEOUT)
    {
        System::LogBas() << "Hub " << myInfo_.endpoint << " timeout. Disconnecting." << std::endl;
        Close();
        DetachMe();
        return;
    }

    if(periodLNI_.Set()) UpdateLNI();

    if(periodQHT_.Set()) UpdateQHT();

    if(periodPing_.Set()) Ping();
}
Exemplo n.º 5
0
void G2Node::OnControlByte(const bs::error_code& err)
{
    if(closed_) return;

    assert(g2buffer_.size() == 1);
    if(!err)
    {
        rawPacket_.push_back(g2buffer_[0]);
        G2::ControlByte cb(g2buffer_[0]);
        g2buffer_.resize(cb.lengthSize + cb.nameSize);
        ba::async_read(*pSocket_, ba::buffer(g2buffer_), ba::transfer_all(),
                       boost::bind(&G2Node::OnPacketHeader, shared_from_this(), ba::placeholders::error));
    }
    else if(err != ba::error::operation_aborted)
    {
        System::LogDev() << "G2Node::OnControlByte " << myInfo_.endpoint.ToString() << " " << err.message() << std::endl;
        DetachMe();
    }
}
Exemplo n.º 6
0
	Observer& Observer::operator=(const Observer& anObserver)
	{
		anObserver;
		DetachMe();
		return *this;
	}
Exemplo n.º 7
0
	Observer::~Observer()
	{
		DetachMe();
	}