Yate Design
(→Modules) |
(→Engine) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
The purpose of Yate's design is to provide an extensible telephony engine. Holding the base code as simple as possible and adding functionality as needed allows one to find the best balance between desired functionality, performance and stability. | The purpose of Yate's design is to provide an extensible telephony engine. Holding the base code as simple as possible and adding functionality as needed allows one to find the best balance between desired functionality, performance and stability. | ||
− | The architecture of Yate is based on a [[Messages|message passing]] system. The architecture can be divided into four main parts as you can see bellow. | + | The architecture of Yate is based on a [[Messages|message passing]] system. The architecture can be divided into four main parts as you can see bellow: |
+ | |||
+ | * '''Core''' - generic classes like String, Thread, Socket, Mutex | ||
+ | * '''Message Engine''' - message related classes Message, Engine, Plugin | ||
+ | * '''Telephony Engine''' - telephony related classes like Driver, Channel | ||
+ | * '''Yate Modules''' - modules of Yate are equal no matter if they are telephony or routing or anything else related, because of the message passing system. | ||
+ | |||
+ | The most important aspect of Yate is its message-passing system. Modules are passing around messages among them. This allows us to have a bigger flexibility than with plain functions, mainly because messages in Yate can have an arbitrary number of parameters, and can be sent to more than one module by changing the priority. | ||
+ | |||
+ | [[File:yate-architecture.png]] | ||
===Core === | ===Core === | ||
Line 10: | Line 19: | ||
===Engine=== | ===Engine=== | ||
− | The engine holds the base C++ classes of Yate and connects together all components. | + | The engine holds the base C++ classes of Yate and connects together all components. |
+ | See the [http://yate.null.ro/docs/|Yate C++ API] here. | ||
===Modules=== | ===Modules=== | ||
− | Most real functionality is provided by [[Modules|modules]] loaded at runtime. | + | Most real functionality is provided by [[Modules|modules]] loaded at runtime. Modules are dynamic libraries loaded as plugins in the engine or external applications started by a specific module ([[External Module|extmodule]]) that allows them to talk to the engine and other modules. |
===Messages=== | ===Messages=== | ||
Line 25: | Line 35: | ||
* [[External Module]] | * [[External Module]] | ||
* [[Messages]] | * [[Messages]] | ||
+ | |||
+ | [[Category:Programmers]] [[Category:Design]] |
Latest revision as of 13:32, 13 November 2015
The purpose of Yate's design is to provide an extensible telephony engine. Holding the base code as simple as possible and adding functionality as needed allows one to find the best balance between desired functionality, performance and stability.
The architecture of Yate is based on a message passing system. The architecture can be divided into four main parts as you can see bellow:
- Core - generic classes like String, Thread, Socket, Mutex
- Message Engine - message related classes Message, Engine, Plugin
- Telephony Engine - telephony related classes like Driver, Channel
- Yate Modules - modules of Yate are equal no matter if they are telephony or routing or anything else related, because of the message passing system.
The most important aspect of Yate is its message-passing system. Modules are passing around messages among them. This allows us to have a bigger flexibility than with plain functions, mainly because messages in Yate can have an arbitrary number of parameters, and can be sent to more than one module by changing the priority.
Contents |
[edit] Core
The Core where encapsulations for sockets, threads and others primitives can be found.
[edit] Engine
The engine holds the base C++ classes of Yate and connects together all components. See the C++ API here.
[edit] Modules
Most real functionality is provided by modules loaded at runtime. Modules are dynamic libraries loaded as plugins in the engine or external applications started by a specific module (extmodule) that allows them to talk to the engine and other modules.
[edit] Messages
The signaling between Yate modules (either plugins or external modules) is performed by using messages. They provide extensibility, customization and technology independence. Each module that needs something from another or tries to notify about some event creates and emits a message. The message flows through the Engine which tries to deliver it to the proper target.
See also