Esempio n. 1
0
udp_handler::udp_handler(boost::asio::io_service &io_service, short port)
    :
        _socket(io_service, udp::endpoint(udp::v4(), port))
{
    LOG_DEBUG << "Server spawned";
    handle_receive();
}
Esempio n. 2
0
/*
 * UART Interrupt handler.
 */
static irqreturn_t tilegx_interrupt(int irq, void *dev_id)
{
	unsigned long flags;
	UART_INTERRUPT_STATUS_t intr_stat;
	struct tile_uart_port *tile_uart;
	gxio_uart_context_t *context;
	struct uart_port *port = dev_id;
	irqreturn_t ret = IRQ_NONE;

	spin_lock_irqsave(&port->lock, flags);

	tile_uart = container_of(port, struct tile_uart_port, uart);
	context = &tile_uart->context;
	intr_stat.word = gxio_uart_read(context, UART_INTERRUPT_STATUS);

	if (intr_stat.rfifo_we) {
		handle_receive(tile_uart);
		ret = IRQ_HANDLED;
	}
	if (intr_stat.wfifo_re) {
		handle_transmit(tile_uart);
		ret = IRQ_HANDLED;
	}

	spin_unlock_irqrestore(&port->lock, flags);
	return ret;
}
Esempio n. 3
0
void udp_handler::handle_send(std::size_t length)
{
    _socket.async_send_to(
            boost::asio::buffer(data_, length),
            _sender_endpoint,
            [this](boost::system::error_code /*ec*/, std::size_t /*bytes_sent*/)
            {
                handle_receive();
            });
            LOG_DEBUG << "Done handling network send";
}
Esempio n. 4
0
void udp_handler::handle_receive()
{
    _socket.async_receive_from(
            boost::asio::buffer(data_, buffer),
            _sender_endpoint,
            [this](boost::system::error_code ec, std::size_t bytes_recvd)
            {
                if(!ec && bytes_recvd > 0)
                {    
                    LOG_DEBUG << "Buffer: " << data_;
                    handle_send(bytes_recvd);
                } else {
                    LOG_DEBUG"test2";
                    handle_receive();
                }
                LOG_DEBUG << "test3";
                    
            });
            LOG_DEBUG << "Done handling network receive";
}
Esempio n. 5
0
// 包处理函数
void ChatClient::handle_packet(IOComponent *ioc, Packet *packet)
{
	if (!ioc || !packet)
	{
		return;
	}

	std::string xml(packet->getData(), packet->getDataLen());
	Command *cmd = ChatXml::parse_command(xml);
	if (!cmd)
	{
		return;
	}

	if (cmd->_cmd == "response")
	{
		handle_response(dynamic_cast<Response*>(cmd));
	}
	else if (cmd->_cmd == "receive")
	{
		handle_receive(dynamic_cast<Receive*>(cmd));
	}
	delete cmd;
}