пятница, февраля 08, 2008

Взаимодействие с клиентом. SmartFoxServer

Главным управляющим объектом серверного скрипта SmartFoxServer является _server.
Для общения с криентом, в основном используется метод sendResponse().

_server.sendResponse(response, fromRoom, sender, recipients, type)
response - объект, который содержит все свойства и объекты, которые необходимо передать клиенту. По соглашению, объект должен содержать свойство _cmd с именем команды.
fromRoom - здесь можно указать идентификатор комнаты, из которой сообщение поступает. Если это ненужно, указывается -1.
sender - объект User пользователя, которого мы хотим указать в качестве отправителя сообщения.
recipients - массив, содержащий один или более объектов User пользователей-получателей
type - формат передаваемых данных. По умолчанию "xml". Для передачи в виде строковой сериализации - "str".


Другой метод sendGenericMessage() может служить для реализации собственных или модифицированных версий стандартных сообщений сервера. Например, можно отключить некоторые сообщения сервера и создать свои собственные версии этих сообщений.

_server.sendGenericMessage(xmlMsg, sender, recipientList)
xmlMsg - XML-сообщение.
sender - объект User пользователя-отправителя.
recipientList - список объектов User пользователей-получателей.
Пример ниже показывает как отправить клиенту данные комнаты, где он в данный момент авторизован:

function sendSmallRoomList(r, who) {
var msg = "<msg t='sys'><body action='rmList' r='-1'>"
msg += "<rmList><rm id='" + r.getId()
msg += "' priv='" + (r.isPrivate() ? "1" : "0")]
msg += "' temp='" + (r.isTemp() ? "1" : "0")
msg += "' game='" + (r.isGame() ? "1" : "0")
msg += "' ucnt='" + (r.getUserCount())
msg += "' maxu='" + r.getMaxUsers()
msg += "' maxs='" + r.getMaxSpectator()
msg += "'><n><![CDATA[" + r.getName() + "]]></n></rm></rmList>"
msg += "</body></msg>"
_server.sendGenericMessage(msg, null, [who])
}


Другие команды для более узкого применения:
_server.dispatchPublicMessage(message, room, user) - послать публичное сообщение.
message - текст сообщения
room - объект Room комнаты, в которую посылается сообщение
user - объект User пользователя-отправителя

_server.dispatchPrivateMessage(message, room, sender, recipient) - послать приватное сообщение.
message - текст сообщения
room - объект Room комнаты, в которую посылается сообщение
sender - объект User пользователя-отправителя
recipient- объект User пользователя-получателя

_server.sendModeratorMessage(message, sender, type, id) - послать сообщение модератора.
message - текст сообщения.
sender - объект User пользователя-отправителя.
type - масштаб рассылки:
_server.MOD_MESSAGE_TO_ZONE - всем пользователям зоны.
_server.MOD_MESSAGE_TO_ROOM - всем пользователям комнаты.
_server.MOD_MESSAGE_TO_USER - конкретному пользователю.
id - к этому параметру нет объяснения.

_server.sendRoomList(who) - послать список комнат пользователю.
who - объект User пользователя-получателя.

Кроме явно отправляющих ответы методов, есть ряд других, опционально отправлящих сообщения, информирующие клиента о каких-либо действиях:
_server.createRoom(roomObj, user, sendUpdate, broadcastEvt, roomVars, varsOwner, setOwnership)
_server.joinRoom(user, currRoomId, leaveRoom, newRoom, pwd, isSpec, sendUpdate)
_server.leaveRoom(user, roomId, broadcastAll)
_server.setUserVariables(who, varList, sendUpdate)
_server.switchSpectator(user, roomId, broadcastAll)

Следующие функции пока оставим без внимания - назначение их специфично:
_server.requestAddBuddyPermission(sender, targetUserName, optionalMessage)
_server.sendBuddyListUpdate(user)
_server.sendMail(from, to, subject, message)
_server.setBuddyBlockStatus(user, buddyName, isBlocked)
_server.setBuddyVariables(user, variables)

2 комментария:

Алексей комментирует...

Есть ли какие-то сведения о поведении данной системы под нагрузкой?

Racer комментирует...

В обзоре я как раз привел ряд мнений и ссылок.

Если интересны мнения "не от производителя" - это надо будет попросить у гугла :).

А вообще, на сколько я понял, в этой нише альтернатив практически нет.