|Here are some diagrams showing how JCast-X internals are working:|
Please note that this is still Alpha everything is subject to change without notice.
You can see from the Diagrams (channel, source, listener) that I always choose the same concept:
A controller (singleton) as a central access that uses a factory (method factory, singleton) to create the needed implementations. Everything theses factories create eventually end up beeing a Thread, and all basic features of e.g. listener+thread or source+thread are implemented through an abstract class. The concrete implementations then extend the abstract class and only provide the "special" thing they need to do.
Take a look for example at the SimpleListenerThread in the Listeners component . It extends AbstractListenerThread and only provides doWork() and configure(), the only methods needed. Thats how easy it is to create a new listener in this framework. Its basically the same with sources and channels, all you have to do is extend the provided Abstract[Listener|Source|Channel]Thread and you are ready to go and implement your own media stream. Thats why I call it eXtensible.
I guess now you wonder why I write the "x" in capital letters. The reason behind this is as you are probably guessing XML. Almost all components of JCast-X are "configurable". This means that they read their own configuration from a XML File (jcast-conf.xml). In the end I hope JCast-X can provide an easy to understand and modify XML through which any admin can easyly create new media streams, where default implementations exist.