Функционал сообщений близок к работе электронной почты: есть входящие, исходящие сообщения, отправитель и адресат и тема сообщения. Также как и письма, сообщения упорядочены по категориям. По своей сути, сообщения являются расширенным типом контента, который позволяет делать сайты портального типа, т.е. с содержимым, формируемым пользователями.
Сообщения — это контент, который можно характеризовать следующими свойствами:
Входящие и исходящие сообщения доступны в общем дереве данных через поля incoming и outcoming, которые есть у каждой категории (см. схему данных выше)
Следующие сервисы позволяют управлять сообщениями:
Рассматривается на двух примерах: отсылка данных о видео-потоке в виде обычной текстовой строки (живая запись в начале вещания) и в виде изменения названия видео-ролика в конце видео-записи.
read_inmail (to_user_id: uint, from_user_id: uint=null, type_name: String) to_user_id - ID получателя сообщений from_user_id - ID отправителя type_name - название типа сообщений, которые нужно получить
Пользователь имеет право чтения своих исходящих и входящих сообщений. Если нужно прочитать все входящие сообщения ото всех пользователей, нужно указать в качестве to_user_id свой ID из хедера профайла (он приходит сразу после логина) и тип сообщений. Поле from_user_id при этом остаётся пустым. Если в нем указать ID пользователя, то увидим все сообщения от этого пользователя заданного типа.
Можно также прочитать все исходящие сообщения ото всех пользователей, для этого нужно указать свой ID в поле from_user_id
send_inmail (mes_arr):int
ActionScript3
Пример 1
var mesObj = new Object(); mesObj.header = new Object(); mesObj.header.content_type = "test"; mesObj.header.subject = "Результат теста"; mesObj.header.to_user_login = "логин получателя"; mesObj.header.from_user_login = "логин отправителя"; mesObj.categories = "test/test1"; mesObj.content = new Object(); mesObj.content = {"content/text/1":"1"};
Пример 2
var mes_arr = new Array(); mes_arr.header = new Array(); mes_arr.header.content_type = "live"; mes_arr.header.subject = "живая"; mes_arr.header.to_user_login = "admin"; mes_arr.header.from_user_login = "sender"; mes_arr.categories="project1/project1camera1" mes_arr.content = new Array(); mes_arr.content["content/text/1"] = "здесь надо хранить ссылку на живой поток"; mes_arr.content["content/text/2"] = "ещё одно значение";
Обратите внимание на 2 последних строчки в примере 2. Индекс в массиве content указывает в какие поля объекта заносятся данные. То что по логике вещей должно быть message.content.text[1] пишется как mes_arr.content[«content/text/1»].
В первом примере контент задаётся сразу весь целиком в одном объекте, во втором он расписан по отдельным полям. Первый вариант формирования контента вам потребуется для тестирования отправки в браузере сервисов.
Категории указываются в формате URL. В системе можно обращаться к категориям по их порядковому номеру или по URL. Поле url обычно используется для формирования ссылок в механизме deep-linking или HTML-версии сайта. Ссылка на категорию формируется из собственно URL самой категории + URL родительских категорий: родитель1/родитель2/наша_категория
Для получения и отправки сообщения обязательно логиниться в системе через сервис login. Соответственно, нам потребуется пользователь с минимальными правами, чтобы он мог только отправлять сообщения и больше ничего не мог делать. Для сайта мы заводим такого пользователя, логинимся им и отправляем от его лица сообщения в систему. Отправлять сообщения можно кому угодно, но вопрос в том, кто и как их потом будет читать. Как правило, эти сообщения потом кем то модерируются, скорее всего админом. Но если вы отправляете сообщения сами себе, то админ их не увидит. Поэтому удобнее всего отправлять их от специально заготовленного пользователя sender пользователю admin. В таком случае их увидит и отправитель с сайта (у которого прав хватает только на отправку и получение сообщений) и администратор сайта во вкладке «сообщения».
Каждое сообщение имеет идентификатор: дату сообщения в милисекундах. Часто возникает необходимость сделать систему вложенных сообщений, например комментарии к сообщениям. Для этой цели было добавлено поле parent_date, которое позволяет привязать сообщение к своему родителю. По умолчанию оно пустое, это означает что сообщение на верхнем уровне иерархии. Если добавить сообщение, указав в его поле parent_date дату другого сообщения, то появится возможность формировать структуру из вложенных сообщений. Но для визуализации этой структуры надо её соответствующим образом вывести на флеш-сайте.
«Отвечать» на сообщения можно также и в системе управления.
Если что то не получается сделать непосредственно из кода, то есть смысл для начала проверить как отправляются и получаются сообщения в браузере сервисов. Браузер сервисов находится по адресу qubix/flash_gateway/browser/
Перед отправкой или получением надо сначала залогиниться через сервис login. Затем найти сервис send_inmail и сформировать запрос. Запрос формируется в виде одного большого объекта, в котором указаны сразу все параметры:
Запрос в браузере сервисов
{"header":{"content_type":"string", "subject":"результат теста", "to_user_login":"demo", "from_user_login":"demo"}, "categories":"project1/camera1", "content":{"content/text/1":"новый тест"}}
Самая большая сложность здесь - правильно расставить фигурные скобки для указания вложенности объектов.
Во флеше формат даты YYYYMMDDHHMMSS, а в UNIX это колличество секунд, прошедшее с начала 1970 года. Поэтому необходимо следующее преобразование:
// Set the unix epoch: var my_date: Date = new Date(1970, 0, 1, 0, 0, 0); // Add on the number of seconds (this is our unix timestamp) my_date.setSeconds(1010342461);