protected override IMessage OnRequestReceived(IMessage request)
        {
            var args = new RequestReceivedArgs <TMessage>((TMessage)request);

            RequestReceived?.Invoke(this, args);
            return(args.Response);
        }
        private void Server_TcpQueryReceived(IArdNetSystem Sender, RequestReceivedArgs e)
        {
            string answer  = null;
            string QryName = e.Request;

            string[] QryArgs = e.RequestArgs;

            switch (QryName)
            {
            case "name":
            {
                answer = System.Environment.MachineName;
                break;
            }

            case "has.feat":
            {
                if (QryArgs.Length == 0)
                {
                    break;
                }
                if (QryArgs[0] == "messaging")
                {
                    answer = "true";
                }
                if (QryArgs[0] == "topics")
                {
                    answer = "true";
                }
                break;
            }

            default:
            {
                Console.WriteLine(e.Request);
                ArdServer.SendTcpQueryResponse(e, e.Request, e.RequestArgs);
                return;
            }
            }


            ArdServer.SendTcpQueryResponse(e, answer);
        }
 protected virtual void OnRequestReceived(RequestReceivedArgs <TMessage> e)
 {
     RequestReceived?.Invoke(this, e);
 }
        private void Server_TcpCommandReceived(IArdNetSystem Sender, RequestReceivedArgs e)
        {
            string status  = null;
            string CmdName = e.Request;

            string[] CmdArgs = e.RequestArgs;

            switch (CmdName)
            {
            //set heartbeat
            case "set.htbt":
            {
                if (CmdArgs.Length != 2)
                {
                    break;
                }

                var attributeName  = CmdArgs[0];
                var attributeValue = CmdArgs[1];

                //set HeartBeat "respond to heartbeat"
                if (attributeName == "respond")
                {
                    if (bool.TryParse(attributeValue, out var boolVal))
                    {
                        e.ConnectedSystem.HeartbeatConfig.RespondToHeartbeats = boolVal;
                        status = "ok";
                    }
                }
                else if (attributeName == "interval")
                {
                    if (int.TryParse(attributeValue, out var intVal))
                    {
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(intVal);
                        status = "ok";
                    }
                }
                break;
            }

            //set device parameters
            case "set.device":
            {
                if (CmdArgs.Length != 2)
                {
                    break;
                }

                var attributeName  = CmdArgs[0];
                var attributeValue = CmdArgs[1];

                //set power level
                if (attributeName == "power")
                {
                    if (attributeValue == "high")
                    {
                        //.1 sec htbt
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(100);
                        status = "ok";
                    }
                    else if (attributeValue == "default")
                    {
                        //.25 sec htbt
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(250);
                        status = "ok";
                    }
                    else if (attributeValue == "low")
                    {
                        //1 sec htbt
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(1000);
                        status = "ok";
                    }
                    else if (attributeValue == "xlow")
                    {
                        //10 sec htbt
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMilliseconds(10000);
                        status = "ok";
                    }
                    else if (attributeValue == "xxlow")
                    {
                        //1 min htbt
                        e.ConnectedSystem.HeartbeatConfig.HeartbeatInterval = TimeSpan.FromMinutes(1);
                        status = "ok";
                    }
                    else if (attributeValue == "xxxlow")
                    {
                        //no htbt
                        e.ConnectedSystem.HeartbeatConfig.ForceStrictHeartbeat = false;
                        status = "ok";
                    }
                }

                break;
            }

            //set text color
            case "set.color":
            {
                if (CmdArgs.Length == 0)
                {
                    break;
                }

                if (Enum.TryParse <ConsoleColor>(CmdArgs[0], out var color))
                {
                    Console.ForegroundColor = color;
                    status = "ok";
                }

                break;
            }
            }

            ArdServer.SendTcpCommandResponse(e, status);
        }