
Работа с Player IO API part #2 - Работа с сообщениями

Ознакомиться с тем что такое Player IO API и как начать работу с ним вы найдёте в первой часте.
Если что-то в ходе прочтения будет не понятно — прошу задавать любые вопросы.
По ссылке в конце поста вы также можете скачать исходник данного урока с готовыми .fla и серверным кодом.
Начнём пожалуй
Сообщения, передаваемые от сервера к клиенту и обратно — основа основ. И изучив их работу, я думаю, вам удастся сделать простейшую онлайн игру/приложение.
Я могу разделить сообщения на 3 вида:
1) Сообщение передоваемое от клиента к серверу;
2) Сообщение генерируемое сервером и посылаемое конкретному клиенту;
3) Сообщение типа «Broadcast» посылаемое сервером каждому подключенному клиенту.
И так — флеш чат. Для начала нужно сделать хоть какое-то подобие графической оболочки.
На первом кадре необходимо провести авторизацию пользователя — ввод имени (в дальнейшем, возможно, пороля или некое подобие регистрации).
Так же, наверное стоить отметить, что кнопки CONNECTING и SEND добавляются на сцену динамически.

На втором кадре в моём исходнике проекта находится надпись «Connecting...». Естественно, рекомендуется обходится вообще одним кадром, но сейчас главное понять основы работы с АПИ не углубляясь в правильность проектирования приложения.
На третьем кадре основа чата — текстовое поле для отображения текста чата, текстовое поле со списком пользователей, а также кнопка «послать сообщение» (создаётся также динамически).

Попытаюсь максимально просто описать работу AS3 и серверного кода для обработки той или иной необходимой нам функции чата.
Отправка имени пользователя на сервер
Не требует работы с сообщениями. Как говорилось в первой части, отправка имени клиента производится при подключении к серверу.
AS3 code
PlayerIO.connect(stage,gameID,"public", nickname,"",handleConnect,handleError);
Имя пользователя здесь именно строковая переменная nickname, данные для которой мы снимаем с текстового поля — NICKNAME в первом кадре приложения.
Однако, если мы хотим также дать возможность например, использовать псевдоним вместо реально зарегистрированого имени в сети, то нам придётся послать сообщение серверу.
Сообщение передоваемое от клиента — серверу
1) Отправка имени серверу
AS3 code
private function handleJoin(conn:Connection):void {
...
connection.send("MyNameIs",nickname);
...
}
Serverside code
public override void GotMessage(Player player, Message message) {
switch(message.Type) {
...
case "MyNameIs":
player.Name = message.GetString(0);
break;
...
}
}
Как вы могли заметить, каждое сообщение должно иметь метку (имя), например когда мы отсылали сообщение серверу с нашим именем мы ставили метку «MyNameIs»:
connection.send("MyNameIs",nickname);
Это необходимо для однозначного определения содержимого передоваемого сообщения, а также для того, чтобы в дальнейшем можно было создать отдельный метод для каждого сообщения в отдельности (как в AS3 так в серверном коде).
2) Отправка сообщения в чат
AS3 code
//Вешаем слушателя на кнопку
SendBtn.addEventListener(MouseEvent.MOUSE_DOWN,sendChat);
//Посылаем сообщение в чат
function sendChat(info){
var nickString:String = nickname;
var txttosend:String = "< "+nickname+" > "+chatText.text;
connection.send("chat",txttosend);
connection.send("update");
chatText.text = "";
}
Serverside code
public override void GotMessage(Player player, Message message) {
switch(message.Type) {
...
case "chat":
Broadcast("addMessage", message.GetString(0));
break;
...
}
}
Мы создали сообщение в клиенте и нажали на кнопку — отправить. Сообщение принимается сервером, и в дальнейшем должно быть отправлено либо приватно какому-либо пользователю (эту функцию можете попробывать реальзовать самостоятельно), либо всем подключенным пользователям. В моём случае это общий канал — сообщение должно быть видно всем подключенным пользователям, поэтому целесообразно использовать функцию Broadcast().
Сообщение типа Broadcast также должно иметь метку. В данном случае это «addMessage».
3) Сообщение полученное от сервера — добавление текста в чат
Для начала, конечно необходимо создать слушателя события для получения сообщения от сервера:
AS3 code
private function handleJoin(conn:Connection):void {
...
conn.addMessageHandler("*",gotMessage);
...
}
//Добавляем текст в чат, если получено сообщение с именем "addMessage"
function gotMessage(info:Message){
switch(info.type){
...
case "addMessage":
chatAllText.text = chatAllText.text+"\n"+info.getString(0);
break;
...
}
}
Посмотреть как производится работа со списком пользователей вы можете скачав исходники:)
Стоит также наверное напомнить:
Для того чтобы послать сообщение одному пользователю, мы должны использовать серверный метод типа — player.Send(«hello»), а во флеше ловить событие получения сообщения делать с ним всё, что захочется:)
Исходники скачиваем тут (954 кб).
- +10
- darkvam
Комментарии (6)
)))
плюс
Давай продолжение :)