Project

General

Profile

Design » History » Version 4

Никита Артемов, 02/24/2012 10:30 AM

1 1 Алексей Филиппов
h1. Проект архитектуры
2
3
Модель архитектуры представлена на следующей схеме:
4
5
!https://redmine.cs.karelia.ru/attachments/download/83/850px-MS_Arch_mods.png!
6
7
h2. Описание уровней архитектуры
8
9
*Сетевой уровень (Network layer)* объединяет используемые социальные сервисы и среду передачи данных. В архитектуре представлены сервисы ВКонтакте, Facebook и Flickr. Каждый сервис предоставляет доступ к данным посредством собственного протокола. В настоящий момент в проекте MySocials реализована поддержка протоколов на основе XML и JSON.
10
11
*Транспортный уровень (Transport layer)* представляет собой набор библиотек доступа к социальным сервисам (драйверов). Основная задача драйвера - выполнять запросы к сервису для получения или отправки данных. Один запрос к драйверу может быть реализован в виде серии запросов к сервису.
12
13
*Промежуточный уровень (Middleware layer)* обеспечивает единый программный интерфейс (MySocials API) доступа к социальным сервисам. API реализован на основе XML. Для более удобной реализации приложений с использованием социальных сервисов реализована Qt библиотека (Core). Библиотека предоставляет набор базовых классов, средства кэширования для автономной работы и объединяет составные запросы.
14
15
*Пользовательский уровень (User layer*) объединяет разработанные приложения и плагины.
16
* Плагины для Qt Messaging Framework (QMF plugins) предоставляют доступ к социальным сервисам аналогично доступу к почтовым сервисам.
17
* Плагины приложений (Application plugins) реализуют работу с социальными сервисами в различных приложениях. В настоящий момент реализован плагин для Telepathy framework и плагин импорта контактов в адресную книгу Maemo.
18
* Консольное тестовое приложение (Console application) позволяет проверить работоспособность драйверов и выполнять запросы на основе MySocials API.
19
* Приложение для просмотра изображений социальных сервисов (Gallery)
20
* Приложение для работы с социальными сервисами (MySocials)
21
22
h2. Описание подсистем
23
24
*Ядро (Core)* – Подпрограмма, отвечающая за перенаправление запросов от других модулей к драйверам и наоборот, контроль использования оперативной памяти программой, выполнение повторяющихся задач(проверка сообщений, проверка друзей и т.д.) 
25
Включает в себя:
26
27
* Менеджер Событий - модуль, выполняющий через определенный промежуток времени повторяющиеся задача (проверка на новые сообщения и т.д.)
28
* Модуль перенаправления запросов - модуль, который перенаправляет запросы, полученные от подпрограмм к драйверам
29
30
*Драйвер (Driver)* - подпрограмма реализующая взаимодействие с определенным сервисом или их группой 
31
Включает в себя:
32
33
* Модуль получения запросов от ядра
34
* Отправка запросов и получение ответов от сервиса
35
* Обработка ответа от сервиса
36
* Модуль отправки ответа ядру
37
38
*Интерфейс пользователя (UI)* - Подпрограмма содержащая графический интерфейс пользователя. Содержит функции по выводу информации пользователю, вызывает функции из виджетов. Включает в себя: 
39
Включает в себя:
40
41
* Формы с компонентами из виджетов
42
43
*Виджеты (Widgets)* - Набор компнентов, содержащих логику работу интерфейса. Виджеты располагаются на уровне конечного приложения. Включают в себя:
44
45
* модули(менеджеры) для соединения графического интерфейса и ядра
46
* модели данных полученные от ядра и методы доступа к ним
47
* функции обработки событий, поступающих от графического интерфейса
48 2 Алексей Филиппов
49
h1. Ядро
50
51
!https://redmine.cs.karelia.ru/attachments/download/84/850px-MSCore_Arch.png!
52
Архитектура ядра
53
54
*Структуры данных*
55
56
В проекте MySocials для хранения данных используются специальные классы-хранилища. Каждому объекту социальной сети соответствует свой класс. Все классы должны наследоваться от базового класса (Base object), содержащего общие для всех объектов поля и методы.
57
58
Поля класса @baseobject@:
59
60
<pre>
61
QString serviceId; // Id сервиса.
62
QString accountId; // Id аккаунта. 
63
QString ownerId;   // Id владельца объекта. 
64
QString objectId;  // Id объекта.
65
QString icon_url;  // Путь до иконки объекта. 
66
bool isPrivate;    // True если объект имеет ограниченный доступ и не может быть загружен с сервиса.
67
bool isEmpty;      // True если в объекте ничего нет, иначе - false.
68
</pre>
69
70
Методы класса @baseobject@:
71
72
<pre>
73
/* Генерирует имя файла на основе пути и ссылки на объект. */
74
const QString generateFileName(const QString &path, const QString &obj) const;
75
</pre>
76
77
Поля класса @event@:
78
79
<pre>
80
QString title;        // Название события.
81
QString description;  // Описание события.
82
QString startTime;    // Время начала события.
83
QString endTime;      // Время завершения события.
84
QString updateTime;   // Время последнего обновления информации о событии.
85
QString location;     // Географическое место расположения.
86
QString privacy;      // Приватность.
87
QString creator;      // Идентификатор пользователя создавшего событие.
88
QString icon;         // URL иконки события.
89
QString rsvpStatus;   // Статус участия.
90
</pre>
91
92
Методы класса @event@:
93
94
<pre>
95
/* "Упаковать" данные в XML формат. */
96
QDomElement toQDomElement(QDomDocument& doc) const;
97
</pre>
98
99
<pre>
100
/* Переопределение предыдущего метода. Во входных параметрах добавлен источник данных. */
101
static QDomElement toQDomElement(QDomDocument& doc, const Event& src);
102
</pre>
103
104
<pre>
105
/* Загрузить данные из XML. */
106
static Event fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, 
107
                             const QString& friendId);
108
</pre>
109
110
h1. Функции ядра
111
112
h2. Получение списка событий
113
114
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что сообщения получены.
115
116
*Параметры:*
117
118
@userId@ - id пользователя чей список нужно получить.
119
@startTime@ - дата, начиная с которой нужно получить события (строка даты в формате UNIX_timestamp или ISO_8601).
120
@alsoLoadIcons@ - также загрузить иконки.
121
122
*Прототип:*
123
124
<pre>
125
void getEvents(QString userId, QString startTime, bool alsoLoadIcons)
126
</pre>
127
128
h2. Создание события
129
130
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекается eventId (id созданного события) и функция возвращает его.
131
132
*Параметры:*
133
134
@title@ - название события.
135
@description@ - описание события.
136
@startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601).
137
@endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601).
138
@location@ - место проведения.
139
@privacy@ - приватность.
140
141
*Прототип:*
142
143
<pre>
144
QString createEvent(QString title, QString description, QString startTime, QString endTime, QString location, 
145
                    QString privacy)
146
</pre>
147
148
h2. Редактирование события
149
150
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе редактирования (true/false) и эта информация возвращается из функции.
151
152
*Параметры:*
153
154
@eventId@ - id события которое требуется редактировать.
155
@title@ - название события.
156
@description@ - описание события.
157
@startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601).
158
@endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601).
159
@location@ - место проведения.
160
@privacy@ - приватность.
161
162
*Прототип:*
163
164
<pre>
165
bool editEvent(QString eventId, QString title, QString description, QString startTime, QString endTime, 
166
               QString location, QString privacy)
167
</pre>
168
169
h2. Удаление события
170
171
*Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе удаления (true/false) и эта информация возвращается из функции. Также функция удаляет информацию о событии из кэша.
172
173
*Параметры:*
174
175
@eventId@ - id события которое требуется удалить.
176
177
*Прототип:*
178
179
<pre>
180
bool deleteEvent(QString eventId)
181
</pre>
182
183
h1. Драйвер
184
185
!https://redmine.cs.karelia.ru/attachments/download/85/850px-MSDriver_Arch.png!
186
Архитектура драйвера
187 3 Никита Артемов
188
h1. Скриншоты
189
190
h2. Приложение Geo
191 4 Никита Артемов
!screen1.png!
192
!screen2.png!
193
!screen3.png!
194
!screen4.png!
195
!screen5.png!