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(); }
/* * 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; }
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"; }
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"; }
// 包处理函数 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; }