/// <summary>
        ///     Handle request from command
        /// </summary>
        /// <param name="request">Received request</param>
        /// <param name="account">Access to account</param>
        /// <param name="waitForFinish">If true, wait task to finish progress</param>
        /// <returns>Response for client</returns>

        #region G9CallHandler

        public void G9CallHandler(G9SendAndReceivePacket request, TAccount account, bool waitForFinish = false)
        {
            Action callCommand = () =>
            {
                CommandDataType <TAccount> command = null;
                try
                {
                    // Check exist command

                    #region Unhandled Command

                    if (!_accessToCommandDataTypeCollection.ContainsKey(request.Command))
                    {
                        _onUnhandledCommand?.Invoke(request, account);
                        return;
                    }

                    #endregion

                    // Get normal command
                    command = _accessToCommandDataTypeCollection[request.Command];

                    // Set log
                    if (_logging.CheckLoggingIsActive(LogsType.EVENT))
                    {
                        _logging.LogEvent(
                            $"{LogMessage.RunningCommand}: {request.Command}", G9LogIdentity.RUNNING_COMMAND,
                            LogMessage.SuccessfulOperation);
                    }

                    // Execute command with information
                    command.AccessToMethodReceiveCommand(request.Body, account, request.RequestId,
                                                         command.ExecuteRegisterCallBack);
                }
                catch (Exception ex)
                {
                    // Add to log exception
                    if (_logging.CheckLoggingIsActive(LogsType.EXCEPTION))
                    {
                        _logging.LogException(ex, LogMessage.ErrorInRunningCommand,
                                              G9LogIdentity.RUNNING_COMMAND, LogMessage.FailedOperation);
                    }

                    // If not null call OnError in this command
                    command?.AccessToMethodOnErrorInCommand?.Invoke(ex, account);
                }
            };

            if (waitForFinish)
            {
                callCommand.Invoke();
            }
            else
            {
                Task.Run(callCommand);
            }
        }
Example #2
0
        /// <summary>
        ///     Management Unhandled commands
        /// </summary>
        /// <param name="packet">Received packet data</param>
        /// <param name="account">account send command</param>

        #region OnUnhandledCommandHandler

        private void OnUnhandledCommandHandler(G9SendAndReceivePacket packet, TAccount account)
        {
            // Set log
            if (_logging.CheckLoggingIsActive(LogsType.WARN))
            {
                _logging.LogWarning(
                    $"{LogMessage.ReceivedUnhandledCommand}\n{LogMessage.CommandName}: {packet.Command}\n{LogMessage.Body}: {Configuration.EncodingAndDecoding.GetString(packet.Body)}\n{LogMessage.PacketType}: {packet.PacketType}",
                    G9LogIdentity.RECEIVE_UNHANDLED_COMMAND, LogMessage.UnhandledCommand);
            }

            // Run event
            OnUnhandledCommand?.Invoke(packet, account);
        }
 public void OnUnhandledCommand(G9SendAndReceivePacket packet, object account)
 {
     ShowEventLogs(
         $"OnUnhandledCommand: Client receive unhandled command.\nCommand name: {packet.Command}\nPacket type: {packet.PacketType}\nPacket data type: {packet.PacketDataType}\n{(account as AAccount)?.SessionSendCommand.GetSessionInfo()}");
 }