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

Продолжим работу с Player IO. Я решил производить все действия на простом примере — флеш чате.

Ознакомиться с тем что такое 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

Комментарии (6)

0
как раз то что ищу=) спасибо +1
0
Отличная статья продолжайте очень интересно. +1
0
молоток
)))
плюс
0
Всем спасибо:) Ждёмс вопрософссс)) Если таковые имеются.
0
Отлично.
Давай продолжение :)
  • ryzed
  • ryzed
0
Будет, как скоро разберусь с базами данных.)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.