Работа с сообщениями

Функционал сообщений близок к работе электронной почты: есть входящие, исходящие сообщения, отправитель и адресат и тема сообщения. Также как и письма, сообщения упорядочены по категориям. По своей сути, сообщения являются расширенным типом контента, который позволяет делать сайты портального типа, т.е. с содержимым, формируемым пользователями.

Сообщения — это контент, который можно характеризовать следующими свойствами:

  1. Имеет отправителя и адресата, т.е. привязку к пользователям и, соответственно, права пользователей на свой контент. Пользователь имеет права на контент, если он является адресатом или отправителем.
  2. В отличии от контента, сообщения можно добавлять через флеш-сайт через Qubix API
  3. Имеет родительскую категорию. Сообщения, также как и обычный контент, хранятся в категориях.
  4. Также как и обычные типы контента, формируется с помощью конструктора типов. При этом «модификация контента» указывается как «сообщение»

Входящие и исходящие сообщения доступны в общем дереве данных через поля incoming и outcoming, которые есть у каждой категории (см. схему данных выше)

Следующие сервисы позволяют управлять сообщениями:

  1. read_inmail
  2. send_inmail
  3. edit_inmail
  4. delete_inmail

Рассматривается на двух примерах: отсылка данных о видео-потоке в виде обычной текстовой строки (живая запись в начале вещания) и в виде изменения названия видео-ролика в конце видео-записи.

Чтение сообщения

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

  • Параметры: mes_arr (header ⇒ array(content_type, subject, to_user_id , from_user_id, parent_date), content, categories)
  • Возвращаемое значение: inmail_id - идентификатор отправленого сообщения

Примеры кода

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":"новый тест"}}

Самая большая сложность здесь - правильно расставить фигурные скобки для указания вложенности объектов.

Преобразование UNIX timestamp в формат даты ActionScript

Во флеше формат даты 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);

http://www.ultrashock.com/forums/viewthread/70126/

 
Наверх
documentation/flash/api/messages.txt · Последние изменения: 2011/07/29 16:01 (внешнее изменение)