Example #1
0
	void connection::read_package_body_handler(std::shared_ptr<stream_buffer> buffer, const error_code& err, std::size_t bytes)
	{
		if (!check_error(err))
		{
			return;
		}

		if (bytes == 0)
		{
			return;
		}

		std::unique_ptr<istream> stream { new istream(buffer) };

		stream->response_dispatch.connect(create_dispatch_slot());

		auto iter = _callbacks.find(stream->uid());

		if (iter != _callbacks.end())
		{
			callback cb = _callbacks[stream->uid()];

			_callbacks.erase(iter);

			cb(std::move(stream));
		}
		else
		{
			received(shared_from_this(), std::move(stream));
		}

		wait_package();
	}
Example #2
0
static YogVal
get_package(YogEnv* env, YogVM* vm, YogVal pkg)
{
    YOG_ASSERT(env, PTR_AS(YogBasicObj, pkg)->flags & FLAG_PKG, "invalid package");
    if (BASIC_OBJ_TYPE(pkg) == TYPE_IMPORTING_PKG) {
        ImportingPackage_lock(env, pkg);
        release_packages_lock(env, vm);
        wait_package(env, pkg);
        ImportingPackage_unlock(env, pkg);
        return PTR_AS(ImportingPackage, pkg)->pkg;
    }
    YOG_ASSERT(env, BASIC_OBJ_TYPE(pkg) == TYPE_PACKAGE, "Invalid package");
    release_packages_lock(env, vm);
    return pkg;
}
Example #3
0
	connection::connection(std::shared_ptr<socket> sckt)
		: _socket(sckt), _socket_locked(false), _uid_counter(0)
	{
		wait_package();
	}