void UDPPusher::onMessageReceived(const sp<AMessage> &msg) {
    switch (msg->what()) {
    case kWhatPush:
    {
        if (!onPush() && !(ntohs(mRemoteAddr.sin_port) & 1)) {
            ALOGI("emulating BYE packet");

            sp<ABuffer> buffer = new ABuffer(8);
            uint8_t *data = buffer->data();
            *data++ = (2 << 6) | 1;
            *data++ = 203;
            *data++ = 0;
            *data++ = 1;
            *data++ = 0x8f;
            *data++ = 0x49;
            *data++ = 0xc0;
            *data++ = 0xd0;
            buffer->setRange(0, 8);

            struct sockaddr_in tmp = mRemoteAddr;
            tmp.sin_port = htons(ntohs(mRemoteAddr.sin_port) | 1);

            ssize_t n = sendto(
                            mSocket, buffer->data(), buffer->size(), 0,
                            (const struct sockaddr *)&tmp,
                            sizeof(tmp));

            CHECK_EQ(n, (ssize_t)buffer->size());
        }
        break;
    }

    default:
        TRESPASS();
        break;
    }
}
Example #2
0
void Demon::move(const Vector2D& force, float addictionalRotation)
{
	onPush(force, nullptr);
	onSwing(minimalAngleDiffirence(getRotC().position + addictionalRotation, Vector2D(force.x, force.y).angle()) * 0.05, nullptr);
}
Example #3
0
void Character::movementScript(float movementSpeed)
{

	float power = getDrag().x;
	if (isPressed("s2"))
		 power *= 0.5;
	else if (isPressed("s1"))
		power *= 0.25;
	onSwing(power);

	if (isPressed("s1"))
	{
		if (isPressed("up"))
		{
			Vector2D v(0, -movementSpeed);
			v.rotate(getRotC().position);
			onPush(v);
		}else
			if (isPressed("down"))
		{
			Vector2D v(0, -movementSpeed * 0.125f);
			v.rotate(getRotC().position + 180);
			onPush(v);
		}
		return;
	}

	if (!(isPressed("up") && isPressed("down")))
	{
		if (isPressed("up"))
		{
			Vector2D v(0, -movementSpeed);
			v.rotate(getRotC().position);

			if (!(isPressed("left") && isPressed("right")))
			{
				if (isPressed("left"))
				{
					v.rotate(-45);
				}
				else if (isPressed("right"))
				{
					v.rotate(45);
				}
			}

			onPush(v);
		}
		if (isPressed("down"))
		{
			Vector2D v(0, movementSpeed);
			v.rotate(getRotC().position);

			if (!(isPressed("left") && isPressed("right")))
			{
				if (isPressed("left"))
				{
					v.rotate(45);
				}
				else if (isPressed("right"))
				{
					v.rotate(-45);
				}
			}

			onPush(v);
		}
	}
	if (!(isPressed("left") && isPressed("right")) && !isPressed("up") && !isPressed("down"))
	{
		if (isPressed("left"))
		{
			Vector2D v(-movementSpeed, 0);
			v.rotate(getRotC().position);
			onPush(v);
		}
		else if (isPressed("right"))
		{
			Vector2D v(movementSpeed, 0);
			v.rotate(getRotC().position);
			onPush(v);
		}
	}

	

}