public void _EmitRawClick(short button, bool down) { gfxPacket npacket = packetFromPool(); npacket.eventType = (byte)(SwapBytes(1) >> 8); // button npacket.button = (short)SwapBytes((ushort)button); npacket.down = (byte)(SwapBytes((ushort)(down ? 1 : 0)) >> 8); Enqueue(npacket); }
public byte[] RawSerialize(gfxPacket item) { int rawSize = Marshal.SizeOf(typeof(gfxPacket)); IntPtr buffer = Marshal.AllocHGlobal(rawSize); Marshal.StructureToPtr(item, buffer, false); byte[] rawData = new byte[rawSize]; Marshal.Copy(buffer, rawData, 0, rawSize); Marshal.FreeHGlobal(buffer); return(rawData); }
private void EmitClick(gfxPacket packet, short button, bool up) { gfxPacket npacket = packetFromPool(); npacket.x = packet.x; npacket.y = packet.y; npacket.pressure = packet.pressure; npacket.eventType = (byte)(SwapBytes(1) >> 8); // button npacket.button = button; npacket.down = (byte)(SwapBytes((ushort)(up ? 0 : 1)) >> 8); Enqueue(npacket); }
private gfxPacket packetFromPool() { if (packetPool.Count == 0) { for (int i = 0; i < PoolCapacity / 2; i++) { packetPool.AddLast(packetQueue.Dequeue()); // remove half of the last messages, it's probably too old anyway if we're this ingested } } gfxPacket packet = packetPool.Last.Value; packetPool.RemoveLast(); return(packet); }
private void update() { while (running) { if (packetQueue.Count > 0) { gfxPacket packet = packetQueue.Dequeue(); socket.SendTo(RawSerialize(packet), endPoint); packetPool.AddLast(packet); //Console.WriteLine($"sent {packet}"); Thread.Sleep(0); } } }
public void ProcessAndEnqueueUpdate(double x, double y, double xmax, double ymax, float pressure, bool inair, bool inverted, bool barrel) { gfxPacket packet = packetFromPool(); packet.pressure = SwapBytes((ushort)(pressure * 32768)); packet.x = SwapBytes((ushort)(x * 65536 / xmax)); packet.y = SwapBytes((ushort)(y * 65536 / ymax)); packet.eventType = 0; // position change if (barrel ^ State.barrel) { State.barrel = !State.barrel; EmitClick(packet, (short)barrelbutton, !State.barrel); } if (inair) { // movement event if (State.clicked) { // it was clicked previously, emit an up event EmitClick(packet, -1, true); State.clicked = false; } } else { if (!State.clicked) { // it was not clicked before, emit a down event EmitClick(packet, -1, false); State.clicked = true; } } Enqueue(packet); }
private void Enqueue(gfxPacket packet) { packetQueue.Enqueue(packet); }