abstract class NetworkMessage
{
    uint MessageId;
    //....
}

override class QueueStatusUpdateMessage : NetworkMessage
{
    uint MessageId = 1;
    //....
}

override class Message2 : NetworkMessage
{
    uint MessageId = 2;
    //....
}

override class Message3 : NetworkMessage
{
    uint MessageId = 3;
    //....
}

And I would like to retrieve all the classes that are based on 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 is NetworkMessage so
                {
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;
    }
}

Reply via email to