/// <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); } }
/// <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()}"); }