Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
 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);
         }
     }
 }
Esempio n. 6
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);
        }
Esempio n. 7
0
 private void Enqueue(gfxPacket packet)
 {
     packetQueue.Enqueue(packet);
 }