UserSettingsItem::UserSettingsItem(User* user_ptr) : ListItem(nullptr), user(user_ptr) { set_roles(); }
void wamp_message_processor::process_message( const std::unique_ptr<wamp_message>& message, std::unique_ptr<wamp_transport>&& transport, wamp_connection_base* connection) { BONEFISH_TRACE("processing message: %1%", message_type_to_string(message->get_type())); switch (message->get_type()) { case wamp_message_type::AUTHENTICATE: break; case wamp_message_type::CALL: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_call_message* call_message = static_cast<wamp_call_message*>(message.get()); router->process_call_message(connection->get_session_id(), call_message); } break; } case wamp_message_type::CANCEL: break; case wamp_message_type::ERROR: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_error_message* error_message = static_cast<wamp_error_message*>(message.get()); router->process_error_message(connection->get_session_id(), error_message); } break; } case wamp_message_type::GOODBYE: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_goodbye_message* goodbye_message = static_cast<wamp_goodbye_message*>(message.get()); router->process_goodbye_message(connection->get_session_id(), goodbye_message); router->detach_session(connection->get_session_id()); } connection->clear_data(); break; } case wamp_message_type::HELLO: { wamp_hello_message* hello_message = static_cast<wamp_hello_message*>(message.get()); std::shared_ptr<wamp_router> router = m_routers->get_router(hello_message->get_realm()); if (!router) { std::unique_ptr<wamp_abort_message> abort_message(new wamp_abort_message); abort_message->set_reason("wamp.error.no_such_realm"); transport->send_message(std::move(*abort_message)); } else { wamp_session_id id; auto generator = router->get_session_id_generator(); do { id = generator->generate(); } while(router->has_session(id)); connection->set_session_id(id); connection->set_realm(hello_message->get_realm()); // We need to setup the sessions roles before attaching the session // so that we know whether or not to also attach the session to the // dealer and the broker. wamp_hello_details hello_details; hello_details.unmarshal(hello_message->get_details()); auto session = std::make_shared<wamp_session>( id, hello_message->get_realm(), std::move(transport)); session->set_roles(hello_details.get_roles()); router->attach_session(session); router->process_hello_message(id, hello_message); } break; } case wamp_message_type::PUBLISH: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_publish_message* publish_message = static_cast<wamp_publish_message*>(message.get()); router->process_publish_message(connection->get_session_id(), publish_message); } break; } case wamp_message_type::REGISTER: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_register_message* register_message = static_cast<wamp_register_message*>(message.get()); router->process_register_message(connection->get_session_id(), register_message); } break; } case wamp_message_type::SUBSCRIBE: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_subscribe_message* subscribe_message = static_cast<wamp_subscribe_message*>(message.get()); router->process_subscribe_message(connection->get_session_id(), subscribe_message); } break; } case wamp_message_type::UNREGISTER: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_unregister_message* unregister_message = static_cast<wamp_unregister_message*>(message.get()); router->process_unregister_message(connection->get_session_id(), unregister_message); } break; } case wamp_message_type::UNSUBSCRIBE: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_unsubscribe_message* unsubscribe_message = static_cast<wamp_unsubscribe_message*>(message.get()); router->process_unsubscribe_message(connection->get_session_id(), unsubscribe_message); } break; } case wamp_message_type::YIELD: { std::shared_ptr<wamp_router> router = m_routers->get_router(connection->get_realm()); if (router) { wamp_yield_message* yield_message = static_cast<wamp_yield_message*>(message.get()); router->process_yield_message(connection->get_session_id(), yield_message); } break; } default: break; } }