void ChatAgent::processInput(PPtr<KString> input) { if(_nickName.empty()) { _nickName = input->toUtf8String(); _pConsole.print("You shall be known as \"" + _nickName + "\"."); _pConsole.print("Type anything to send. Enter \"quit\" to finish."); } else if(input->equals("quit")) { _pConsole.print("Bye!"); quit(); } else { Ptr<KRecord> message = new KRecord(message_t()); message->getString(MESSAGE_T_SENDER)->set(_nickName); message->getString(MESSAGE_T_CONTENT)->set(input.AS(KValue)); sendToAll(OP_MESSAGE, message.AS(KValue)); } }
void uv_udp_handle_t::on_read(uv_udp_t* handle, ssize_t nread, uv_buf_t buf, struct sockaddr* addr, unsigned flags) { /* udp max datagram read pack size: SHARED_READ_BUFFER_SIZE(64 * 1024) */ if (nread == 0) { return; } uv_udp_handle_t* udp_handle = (uv_udp_handle_t*)(handle->data); if (nread == -1) { singleton_ref(node_lua_t).context_send(udp_handle->m_source, 0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, singleton_ref(network_t).last_error()); return; } buffer_t buffer = buffer_new(nread, buf.base, nread); char* host = (char*)nl_malloc(64); uint16_t port = 0; bool ipv6 = false; *host = '\0'; sockaddr_host(addr, host, 64, &ipv6, &port); message_array_t* array = message_array_create(4); array->m_array[0] = message_t(0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, buffer); array->m_array[1] = message_t(0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, host); array->m_array[2] = message_t(0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, (int64_t)port); array->m_array[3] = message_t(0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, ipv6); singleton_ref(node_lua_t).context_send_array_release(udp_handle->m_source, 0, udp_handle->m_lua_ref, RESPONSE_UDP_READ, array); }
void send_message_tuple(void *z_sock, int flags, Args... args) { using message_t = msgpack::type::tuple< typename std::remove_reference<Args>::type...>; send_message(z_sock, flags, message_t(args...)); }