コード例 #1
0
        private void HandleSocketCommand(ISocketCommand socketCommand)
        {
            //inject GpioConnection
            var socketGpioCmd = socketCommand as SocketGpioCmd;
            if (socketGpioCmd != null)
            {
                socketGpioCmd.DriverHelper = _driverHelper;
            }

            socketCommand.Execute();
        }
コード例 #2
0
        public static void ProcessData(Sender session, List <byte> buffer, byte[] data, JCP protocol, ICommandFactory factory)
        {
            Log.Message("JCP", "Received " + data.Length + " bytes.");

            // We have to assume the buffer exists for the session
            buffer.AddRange(data);

            bool parsing = true;

            while (parsing)
            {
                if (buffer.Count >= Platform.ByteSizeOfInt)
                {
                    byte[] lengthBytes  = buffer.GetRange(0, Platform.ByteSizeOfInt).ToArray();
                    int    packetLength = BitConverter.ToInt32(lengthBytes, 0);

                    // We've got a complete packet at this point
                    if (buffer.Count >= (packetLength + Platform.ByteSizeOfInt))
                    {
                        Packet packet = new Packet(buffer.GetRange(Platform.ByteSizeOfInt, packetLength).ToArray(), protocol.EncryptionKey);

                        // Remove processed data
                        buffer.RemoveRange(0, Platform.ByteSizeOfInt + packetLength);

                        // Execute packet instructions
                        foreach (Instruction i in packet.GetInstructions())
                        {
                            Log.Message("socket", "Instruction Received -> " + i.Operation.ToString() + " from " + session.RemoteEndPoint.GetHost());

                            // Factory Pattern
                            ISocketCommand receivedCommand = factory.CreateCommand(i.Operation);

                            // Execute (decide what to do though)
                            if (receivedCommand.CanExecute(session))
                            {
                                receivedCommand.Execute(session, i.Parameters);
                            }
                        }
                    }
                    else
                    {
                        parsing = false;
                    }
                }
                else
                {
                    parsing = false;
                }
            }
        }
コード例 #3
0
 public void Add(ISocketCommand command)
 {
     _commands.Enqueue(command);
 }
コード例 #4
0
 public void Add(ISocketCommand command)
 {
     _commands.Enqueue(command);
 }