TypeValidator.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using SuperSocket.Common;
  8. using SuperSocket.SocketBase;
  9. namespace SuperSocket.SocketEngine
  10. {
  11. class TypeValidator : MarshalByRefObject
  12. {
  13. private const string m_ServerManagerTypeName = "SuperSocket.ServerManager.ManagementServer";
  14. public bool ValidateTypeName(string typeName)
  15. {
  16. Type type = null;
  17. try
  18. {
  19. type = AssemblyUtil.GetType(typeName, false, true);
  20. }
  21. catch
  22. {
  23. }
  24. return type != null;
  25. }
  26. internal static bool IsServerManagerType(Type serverType)
  27. {
  28. var currentType = serverType;
  29. while (true)
  30. {
  31. if (currentType.FullName == m_ServerManagerTypeName)
  32. return true;
  33. if (currentType.BaseType == null)
  34. return false;
  35. currentType = currentType.BaseType;
  36. }
  37. }
  38. public ServerTypeMetadata GetServerTypeMetadata(string typeName)
  39. {
  40. Type type = null;
  41. try
  42. {
  43. var metadata = new ServerTypeMetadata();
  44. type = Type.GetType(typeName, false);
  45. metadata.StatusInfoMetadata = type.GetStatusInfoMetadata();
  46. if (IsServerManagerType(type))
  47. metadata.IsServerManager = true;
  48. return metadata;
  49. }
  50. catch
  51. {
  52. return null;
  53. }
  54. }
  55. }
  56. }