Reflection in D
    medhi558 via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Fri Jan 27 23:03:51 PST 2017
    
    
  
I develop a game server. Currently I use a switch :
import protocol.messages.connection.Message1;
import protocol.messages.connection.Message2;
import protocol.messages.queues.Message3;
import ......
import protocol.messages.NetworkMessage;
class ProtocolMessageManager
{
	public static NetworkMessage GetInstance(uint id)
	{
	      switch(id)
               {
                  case Message1.Id:
                      return new Message1();
                  case Message2.Id:
                      return new Message2();
                  .....
                  default:
	              return null;
               }
         }
}
what I want to do :
import protocol.messages.NetworkMessage;
class ProtocolMessageManager
{
     private static TypeInfo_Class[uint] m_types;
     public static void Init()
     {
         foreach(mod; ModuleInfo)
	{
	    foreach(TypeInfo_Class lc; mod.localClasses)
	    {
                 if(lc.name.indexOf("protocol.messages") != -1)
                 {
                     NetworkMessage c = 
cast(NetworkMessage)lc.create();
	            ProtocolMessageManager.m_types[c.MessageId] = lc;
                 }
	    }
					
	}
     }
     public static NetworkMessage GetInstance(string id)
     {
	auto v = (id in ProtocolMessageManager.m_types);
	if (v !is null)
	 return 
cast(NetworkMessage)ProtocolMessageManager.m_types[id].create();
	else
          return null;
     }
}
    
    
More information about the Digitalmars-d-learn
mailing list