
Работа с Player IO API part #1 - setup
1

Думаю многие пробывали уже капаться с их апи и серверным кодингом.
Я же попробую сделать маленький туториал для новичков в меру своих сил. На официальном сайте playerio есть достаточно много подробных туториалов и документации по АПИ, однако как мне показалось, многие вещи остались не досказанными, а иногда и просто теряешься в этих документах.
Я на данный момент нахожусь на достаточно начальном уровне навыка работы с playerio, однако думаю будем разбираться вместе что и как да и у меня пойдёт обучение быстрее. Прошу принять во внимание ещё и тот факт что я не программист:) as3 начал изучать совсем недавно, а вот с C# начал знакомство буквально неделю назад.
Собственно начнём.
Разработка онлайн игр с помощью сервиса playerio от нас требует знание языка AS3 (AS2 не поддерживается), базовое знание C# (есть подробная документация по методам на оф. сайте), редактор ас3, и редактор C#(microsft visual 2008, 2010). Хостить нас будет сервис.
Для любителей лицензионных и триал версий, либо вообще бесплатных:
Adobe Flash — http://www.adobe.com/go/tryflash
Visual studio — http://www.microsoft.com/express/download/ (выбираем C# edition)
Player IO API, сервер разработки на локальном хосте с примерами игр — http://playerio.com/download/
Для начала поглядим на тарифные планы.
Для ознакомления нам хватит тарифного плана FREE. Вот на него и регистрируемся.
В админ панели нас попросят создать игру введя название (не обязательно реальное название проекта).

После создания игры нам выдадут уникальный ID (его мы используем чуть позже).

Создаём проект во флеше.
Примерная иерархия для проекта (.fla лежит в папке com):

serverside код кладём в корень.
При этом, глянем на сам этот код. Он не должен иметь пока каких либо функций кроме стандартных. Можно взять готовый код и урезать примерно до такого вида чтобы не путаться для начала:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using PlayerIO.GameLibrary;
using System.Drawing;
namespace ArmaCube {
public class Player : BasePlayer {
public string Name;
}
public class GameCode : Game<Player> {
public override void GameStarted() {
Console.WriteLine("Game is started: " + RoomId);
AddTimer(delegate {
}, 100);
AddTimer(delegate {
RefreshDebugView();
}, 250);
}
public override void GameClosed() {
Console.WriteLine("RoomId: " + RoomId);
}
public override void UserJoined(Player player) {
player.Send("hello");
Broadcast("UserJoined", player.Id);
}
public override void UserLeft(Player player) {
Broadcast("UserLeft", player.Id);
}
public override void GotMessage(Player player, Message message) {
switch(message.Type) {
}
}
Point debugPoint;
public override System.Drawing.Image GenerateDebugImage() {
var image = new Bitmap(400,400);
using(var g = Graphics.FromImage(image)) {
g.FillRectangle(Brushes.Blue, 0, 0, image.Width, image.Height);
g.DrawString(DateTime.Now.ToString(), new Font("Verdana",20F),Brushes.Orange, 10,10);
g.FillRectangle(Brushes.Red, debugPoint.X,debugPoint.Y,5,5);
}
return image;
}
[DebugAction("Play", DebugAction.Icon.Play)]
public void PlayNow() {
Console.WriteLine("The play button was clicked!");
}
[DebugAction("Set Debug Point", DebugAction.Icon.Green)]
public void SetDebugPoint(int x, int y) {
debugPoint = new Point(x,y);
}
}
}
Заходим во вкладку Game code и пишем название игры (название проекта и следовательно swf).
Swf и серверный код назначаем публиковаться в папку Output
Для соединения с сервером мы используем строчку кода вида:
PlayerIO.connect(stage,gameID,"public", nickname,"",handleConnect,handleError);
Где gameID — идентификатор вашей игры полученный ранее занесёный в статическую переменную.
Функции handleConnect, handleError отвечают за удачное соединение и ошибку соединения соответственно.
handleError достаточно только объявить.
А вот с handleConnect стоит малость поработать.
Следующий код подключается к комнате «ArmaCube», либо если таковой не имеется — создаёт её.
private function handleConnect(client:Client) {
trace("Connected to server");
client.multiplayer.developmentServer="localhost:8184";//комментим чтобы подключаться к серверу в онлайн
client.multiplayer.createJoinRoom("test", "ArmaCube",true, {},{},handleJoin,handleError);
}
Опять же handleJoin,handleError — см. выше.
private function handleJoin(conn:Connection):void {
connection=conn;
connection.addMessageHandler("*",gotMessage);
connection.addMessageHandler("hello", function(m:Message){
trace("Recived a message with the type hello from the server");
})
}
После всех этих экзекуций запускаем девелопер сервер (серверный код) нажатие на зелёную кнопку плей сверху либо шоткатом — ctrl+F5
Публикуем SWF. Если всё сделано правильно, в консоли мы увидим надпись — Recived a message with the type hello from the server. Это значит что мы подключились к серверу на локалхосте, создали тестовую комнату, а сервер в свою очередь при нашём соединении послал нам сообщение «hello» в ответ на приём которого мы сгенерировали событие вывода в консоль строки о получении послания.
После этого, полученный файл ArmaCude.dll лежащий в папке Output можно загрузить на сервер playerio.
Однако, чтобы увидеть пинг от сервера мы должны будем создать как минимум текстовое поле и прописывать туда всё что угодно в случае получения сообщения от серва.
Заходим в админ панель на сайте, кликаем в списке на нашу созданную игру и делаем так:

Выбираем наш .dll
И готово.
Не забудьте в настройках публикации флешки подшаманить local playback security на network.
PS если у кого-то что-либо не получится, или есть вопросы — пишите, будем разбираться.
- +9
- darkvam
Комментарии (9)
Я согласен, мог пропустить некоторые вещи, Но я буду только рад если кто-то о чём то спросит — мне не сложно ответить. Просто пост и так великоват согласитесь?)
А, и ещё. Этот (и последующие посты) предназначены не только для описания методов работы, но и для обсуждения, вопросов и т.п. Дело в том что и я не во всё до конца вник.) У меня процесс обучения ещё идёт) и буду рад, если ктото поправит или поможет в чём то разобраться)
В целом, большое спасибо за уроки, радует что они есть :).