Example #1
0
bool gkMouseNode::evaluate(gkScalar tick)
{
	gkMouse* dev = gkWindowSystem::getSingleton().getMouse();

	gkScalar x = 0, y = 0;
	gkScalar x_scale = GET_SOCKET_VALUE(SCALE_X);
	gkScalar y_scale = GET_SOCKET_VALUE(SCALE_Y);

	if (dev->moved)
	{
		if (GET_SOCKET(REL_X)->isConnected()) x = dev->relative.x * x_scale;
		if (GET_SOCKET(REL_Y)->isConnected()) y = dev->relative.y * y_scale;
	}

	if (GET_SOCKET(ABS_X)->isConnected()) SET_SOCKET_VALUE(ABS_X, dev->position.x * x_scale);
	if (GET_SOCKET(ABS_Y)->isConnected()) SET_SOCKET_VALUE(ABS_Y, dev->position.y * y_scale);

	SET_SOCKET_VALUE(REL_X, x);
	SET_SOCKET_VALUE(REL_Y, y);
	SET_SOCKET_VALUE(MOTION, dev->moved);
	SET_SOCKET_VALUE(WHEEL, dev->wheelDelta);
	SET_SOCKET_VALUE(WHEEL_MOTION, dev->wheelDelta ? true : false);

	return false;
}
Example #2
0
static int _tcp_connect(network_context_t *ctx)
{
    network_context_socket_tcp_t *tcp_io_ctx;

    assert(ctx);

    tcp_io_ctx = (network_context_socket_tcp_t *) ctx->impl_data;
    assert(tcp_io_ctx);

    PTHREAD_CALL(pthread_mutex_lock(&tcp_io_ctx->connect_lock));
    if (!tcp_io_ctx->connected)
    {
        assert(ctx->peer_addr_valid);
        assert(ctx->peer_addr.sa_family == AF_INET);
        assert(((struct sockaddr_in *) &ctx->peer_addr)->sin_port > 0);

        DEBUG_LOG(("_tcp_connect (my_sd=%d): connecting on socket %d...\n",
                   tcp_io_ctx->sock_ctx->my_sd, (int)GET_SOCKET(ctx)));
        if ((connect(GET_SOCKET(ctx), &ctx->peer_addr,
                     sizeof(ctx->peer_addr))) < 0)
        {
            perror("connect (_tcp_connect)");
            fprintf(stderr, "(errno=%d)\n", errno);
            return -1;
        }

        tcp_io_ctx->connected = TRUE;
    }
    PTHREAD_CALL(pthread_mutex_unlock(&tcp_io_ctx->connect_lock));

    return 0;
}
Example #3
0
/* send the given packet to the peer */
ssize_t _network_send_packet(network_context_t *ctx,
                             const void *src, size_t len)
{
    network_context_socket_tcp_t *tcp_io_ctx;
    uint16_t packet_len;    /* network byte order */

    assert(ctx && src);
    assert(ctx->peer_addr_len > 0);

    tcp_io_ctx = (network_context_socket_tcp_t *) ctx->impl_data;
    assert(tcp_io_ctx);

    VERIFY_SOCKET(ctx);
    DEBUG_PEER(ctx);

    if (_tcp_connect(ctx) < 0)
        return -1;

    packet_len = htons(len);
    if (_tcp_io(GET_SOCKET(ctx), &packet_len, sizeof(packet_len),
                (io_func_t) write) < 0 ||
        _tcp_io(GET_SOCKET(ctx), (void *) src, len, (io_func_t) write) < 0)
        return -1;

    /* printf("network send: %lu\n", len); */
    return len;
}
Example #4
0
int _network_listen(network_context_t *ctx, int backlog)
{
    assert(ctx);
    VERIFY_SOCKET(ctx);

    return listen(GET_SOCKET(ctx), backlog);
}
Example #5
0
bool gkVariableNode::evaluate(gkScalar tick)
{
	if (!m_prop) return false;


	SET_SOCKET_VALUE(RESULT, *m_prop);

	if (!GET_SOCKET(SET)->isLinked() && !GET_SOCKET(VALUE)->isLinked())
	{
		// variable will not change
		return false;
	}

	if (GET_SOCKET_VALUE(SET))
		m_prop->setValue(GET_SOCKET_VALUE(VALUE));
	return false;
}
Example #6
0
void VariableOpNode::initialize()
{
	if (!m_varName.empty())
	{
		gkGameObject* ob = GET_SOCKET(SET)->getGameObject();
		if (ob != 0)
			m_prop = ob->getVariable(m_varName);
	}
}
Example #7
0
void gkVariableNode::initialize()
{
	if (!m_varName.empty())
	{
		gkGameObject* ob = GET_SOCKET(SET)->getGameObject();
		if (ob != 0)
		{
			if (!ob->hasVariable(m_varName))
				m_prop = ob->createVariable(m_varName, m_debug);
			else
				m_prop = ob->getVariable(m_varName);

			if (m_prop && GET_SOCKET_VALUE(SET))
				m_prop->setValue(GET_SOCKET_VALUE(VALUE));
		}
	}
}
Example #8
0
/* read a packet from the peer */
ssize_t _network_recv_packet(network_context_t *ctx, void *dst, size_t max_len)
{
    network_context_socket_tcp_t *tcp_io_ctx;
    uint16_t packet_len;
    socket_t io_socket;
    int rc;

    assert(ctx && dst);

    tcp_io_ctx = (network_context_socket_tcp_t *) ctx->impl_data;
    assert(tcp_io_ctx);
    assert(tcp_io_ctx->sock_ctx);

    VERIFY_SOCKET(ctx);
    io_socket = tcp_io_ctx->base.socket;

    if (tcp_io_ctx->sock_ctx->is_active && _tcp_connect(ctx) < 0)
        return -1;

    if (tcp_io_ctx->sock_ctx->listening/* ||
        (tcp_io_ctx->sock_ctx->is_active && !tcp_io_ctx->connected)*/)
    {
        socket_t tmp_sd;

        ctx->peer_addr_len = sizeof(ctx->peer_addr);
        if ((tmp_sd = accept(GET_SOCKET(ctx),
                             &ctx->peer_addr,
                             &ctx->peer_addr_len)) < 0)
        {
            perror("accept (network_io_tcp)");
            return tmp_sd;
        }

        DEBUG_LOG(("accepted from peer, tmp_sd=%d...\n", (int) tmp_sd));

        /* keep listening socket open for futher connection requests */
        /* we will not reenter this function until this SYN packet has
         * been dispatched to the right context, and that context's
         * socket updated to be 'new_socket'
         */
        assert(tcp_io_ctx->new_socket == -1);
        tcp_io_ctx->new_socket = tmp_sd;
        io_socket = tmp_sd;
    }

    DEBUG_PEER(ctx);

#ifdef DEBUG
    if (getpeername(io_socket, &ctx->peer_addr, &ctx->peer_addr_len) < 0)
    {
        DEBUG_LOG(("getpeername failed (errno=%d)\n", errno));
        return -1;
    }
#endif

    if ((rc = _tcp_io(io_socket, &packet_len, sizeof(packet_len), read)) <= 0)
    {
        DEBUG_LOG(("couldn't read packet len: %d\n", rc));
        return rc;
    }

    packet_len = ntohs(packet_len);
    if ((rc = _tcp_io(io_socket, dst, MIN(packet_len, max_len), read)) <= 0)
    {
        DEBUG_LOG(("couldn't read packet: %d\n", rc));
        return rc;
    }

    if (packet_len > max_len)
    {
        /* discard unread remainder of packet */
        char *dummy = (char *) alloca(packet_len - max_len);
        (void) _tcp_io(io_socket, dummy, packet_len - max_len, read);
    }

    /* printf("network_recv_packet: %d\n", packet_len); */
    return packet_len;
}