CommandInfo.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using SuperSocket.SocketBase.Metadata;
  6. namespace SuperSocket.SocketBase.Command
  7. {
  8. class CommandInfo<TCommand>
  9. where TCommand : ICommand
  10. {
  11. public TCommand Command { get; private set; }
  12. public CommandFilterAttribute[] Filters { get; private set; }
  13. public CommandInfo(TCommand command, IEnumerable<CommandFilterAttribute> globalFilters)
  14. {
  15. Command = command;
  16. var allFilters = new List<CommandFilterAttribute>();
  17. if (globalFilters != null && globalFilters.Any())
  18. {
  19. allFilters.AddRange(globalFilters);
  20. }
  21. IEnumerable<CommandFilterAttribute> filters = command is ICommandFilterProvider ?
  22. (command as ICommandFilterProvider).GetFilters() : AppServer.GetCommandFilterAttributes(command.GetType());
  23. if (filters != null && filters.Any())
  24. allFilters.AddRange(filters);
  25. if (allFilters.Any())
  26. {
  27. Filters = allFilters.OrderBy(f => f.Order).ToArray();
  28. }
  29. }
  30. }
  31. }