Solution Strategy

Overall Architecture

GOnnect follows a layered architecture pattern with clear separation of concerns:

Diagram

Design Patterns

Singleton Pattern

Used for global managers that should have exactly one instance:

  • SIPManager - SIP stack management

  • StateManager - Global application state

  • AddressBookManager - Contact source management

  • UISettings - UI configuration

Factory Pattern

Used for creating contact and calendar sources:

  • IAddressBookFactory - Contact source factory

  • IDateEventFeederFactory - Calendar source factory

Observer Pattern

Qt’s signal/slot mechanism for event notification:

  • ErrorBus - Error event broadcasting

  • StateManager - State change notifications

  • SIPManager - Buddy state changes

MVC Pattern

For QML data models:

  • CallsModel - Call list model

  • HistoryModel - Call history model

  • ContactModel - Contact list model

Technology Decisions

Why Qt/QML?

  • Cross-platform GUI framework

  • Declarative UI with QML

  • Strong C++ backend integration

  • Rich ecosystem of Qt modules

  • Active community and long-term support

Why PJSIP?

  • Mature SIP stack (15+ years)

  • Feature-complete implementation

  • C++ wrapper (PJSUA2) available

  • Active development and maintenance

  • Industry-standard compliance

Why CMake + Conan?

  • Modern build system with presets

  • Cross-platform compatibility

  • Conan for dependency management

  • Better dependency versioning than Qt’s qmake

Module Responsibilities

SIP Module

Component Responsibility

SIPManager

Central SIP stack management, account handling

SIPCall

Individual call state and media handling

SIPCallManager

Call lifecycle management

SIPBuddy

Contact buddy state tracking

SIPAccount

Account configuration and credentials

Contacts Module

Component Responsibility

AddressBookManager

Contact source orchestration

Contact

Contact data model

ContactModel

QML contact list model

AvatarManager

Contact avatar handling

Calendar Module

Component Responsibility

DateEventFeederManager

Calendar source orchestration

DateEvent

Calendar event data model

DateEventsModel

QML calendar events model

Media Module

Component Responsibility

AudioManager

Audio device and stream management

VideoManager

Video device and stream management

AudioPort

Audio port routing

Component Interaction

Diagram