Создание сервера с помощью Photon (основы)

Создание сервера с помощью Photon (основы)

Сообщение voe 22 сен 2011, 14:55

Пытаюсь сделать простейший сервер на Photon по "урокам" http://cjrgaming.com/node/13 http://cjrgaming.com/node/15
Ошибок не происходит но и подключения тоже нету. Сервер Photon настроен правильно в его логах мой сервер(TestServer) запущен.
Код Сервера:
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
    using Photon.SocketServer;
    using Photon.SocketServer.Rpc;
    using PhotonHostRuntimeInterfaces;
    public class MyPeer : Peer, IOperationHandler
    {
        public MyPeer(InitRequest initRequest)
            : base(initRequest.Protocol, initRequest.PhotonPeer)
        {
            this.SetCurrentOperationHandler(this);
        }
        void IOperationHandler.OnDisconnect(PeerBase peer)
        {
            this.Disconnect();
            this.Dispose();
        }
        void IOperationHandler.OnDisconnectByOtherPeer(PeerBase peer)
        {            
        }
        OperationResponse IOperationHandler.OnOperationRequest(PeerBase peer, OperationRequest operationRequest, SendParameters sendParameters)
        {
            return new OperationResponse(0, operationRequest);
        }
    }
}
 


Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestServer
{
    using Photon.SocketServer;
    public class MyServer : ApplicationBase //Реализует иентерфейс самого сервера
    {
        protected override PeerBase CreatePeer(InitRequest initRequest) //создание подключений
        {
            return new MyPeer(initRequest); //Инициализация создания подключения
        }
        protected override void Setup()
        {
        }

        protected override void TearDown()
        {
        }
    }
}
 


Код на Unity

Синтаксис:
Используется csharp
using System.Collections;
using System;
using UnityEngine;
using ExitGames.Client.Photon;


public class Login : MonoBehaviour
{

    Game engine;// = new Game();

    // Use this for initialization
    void Start()
    {
        Application.runInBackground = true;
        engine = new Game();
    }

    // Update is called once per frame
    void Update()
    {
        try
        {
            this.engine.Update();
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }
    }

    ///
    /// The on application quit.
    ///
    public void OnApplicationQuit()
    {
        try
        {
            this.engine.Disconnect();
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }
    }

    public void OnGUI()
    {        
        if (GUI.Button(new Rect(100, 60, 100, 30), "Connect"))
        {
            PhotonPeer peer = new PhotonPeer(this.engine, false);
            try
            {
               engine.Initialize(peer, "10.40.142.2:5055", "TestServer");
             
            }
            catch (Exception e)
            {
                Debug.Log(e);
            }
        }
        Debug.Log(engine.status);
        GUI.Label(new Rect(100, 100, 300, 300), engine.status);        
       
    }
}
 



Синтаксис:
Используется csharp
using UnityEngine;
//using System.Collections;
using System;
using ExitGames.Client.Photon;

public class Game : IPhotonPeerListener
{

    PhotonPeer peer;
   
    public string status = "disconnected";

   
    public void Initialize(PhotonPeer peer, string serverAddress, string applicationName)
    {        
            this.peer = peer;
            Debug.Log("StatusConnect: "+peer.Connect(serverAddress, applicationName).ToString());
            Debug.Log("StatusConnect: " + peer.PeerState.ToString());
    }

    public void Disconnect()
    {
        if (status != "disconnected")
        {
            peer.Disconnect();
        }
    }

    public void Update()
    {
        if (status != "disconnected")
        {
            peer.Service();
        }
    }

    public void OnStatusChanged(StatusCode statusCode)
    {
        Debug.Log("OnStatusChanged");
        switch (statusCode)
        {
            case StatusCode.Connect:
                {
                    status = "connected";
                    break;
                }

            case StatusCode.Disconnect:
            case StatusCode.DisconnectByServer:
            case StatusCode.DisconnectByServerLogic:
            case StatusCode.DisconnectByServerUserLimit:
            case StatusCode.TimeoutDisconnect:
                {
                    status = "Disconinected";
                    break;
                }
            default:
                {
                    status = "unexpected";
                    break;
                }
        }        
    }

    public void DebugReturn(DebugLevel level, string message)
    {
        Debug.Log(message);
    }

    public void OnEvent(EventData eventData)
    {
        Debug.Log("Event");
        throw new NotImplementedException();
    }
    public void OnOperationResponse(OperationResponse operationResponse)
    {
        Debug.Log("Response");
        throw new NotImplementedException();
    }
}
 


Скрипт с классом Login вешаю на Main Camera
Отображается кнопка и надпись под ней. Но коннекта не происходит. Подскажите в чем проблема, или как посмотреть ошибку.

P.S. Вопрос вроде и по сети и для раздела "Почемучка" так что за размещения его в раздели Сеть просьба не ругать.
voe
UNIт
 
Сообщения: 65
Зарегистрирован: 11 июл 2011, 14:09

Re: Создание сервера с помощью Photon (основы)

Сообщение sp00n 22 сен 2011, 15:51

Это какая версия фотона?

В любом случае попробуйте убрать проверку статуса на "disconnected" в Update(). Ибо не получите обработку входящих без вызова пировского Service().

upd: Это в Вашем классе Game.
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Создание сервера с помощью Photon (основы)

Сообщение voe 22 сен 2011, 16:06

sp00n писал(а):Это какая версия фотона?

В любом случае попробуйте убрать проверку статуса на "disconnected" в Update(). Ибо не получите обработку входящих без вызова пировского Service().

upd: Это в Вашем классе Game.


использую Photon v3-0 RC3
Большое спасибо получилось.
voe
UNIт
 
Сообщения: 65
Зарегистрирован: 11 июл 2011, 14:09

Re: Создание сервера с помощью Photon (основы)

Сообщение voe 23 сен 2011, 09:41

Что то совсем плохо идет освоение уроков. Инфы по Photon очень мало. :(
Может имеет смысл использовать плагин для Unity Networking ? Или дальше грызть "чистый" Photon ?
Важный момент время для освоения есть, важно выбрать направление точно и потом не менять его.
Подскажите. :)
voe
UNIт
 
Сообщения: 65
Зарегистрирован: 11 июл 2011, 14:09

Re: Создание сервера с помощью Photon (основы)

Сообщение sp00n 23 сен 2011, 13:46

Почему мало инфы?оО Имхо - достаточно:)
В Asset Store Unity смотрели пример ММО с викингами? Или же LiteLobby пример на основе Bootcamp?
Да и официальной документации в принципе хватает - там не так много всего для изучения :)

Насчет Unity Networking ничего не скажу - не использую пока что, поэтому и не смотрел.
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Создание сервера с помощью Photon (основы)

Сообщение gnoblin 23 сен 2011, 15:32

Инфы много, хотя может сначала ее видно не очень хорошо :).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Создание сервера с помощью Photon (основы)

Сообщение gnoblin 23 сен 2011, 15:33

PUN хороший вариант (более простой в понимании и использовании),
правда я бы подождал версию 1.2 (скоро по-идее выпустят),
т.к. в 1.1 были косяки :).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Создание сервера с помощью Photon (основы)

Сообщение tankisto 25 сен 2011, 00:00

gnoblin писал(а):Инфы много, хотя может сначала ее видно не очень хорошо :).

подскажите, люди добрые, в какую сторону смотреть по фотону?
tankisto
UNец
 
Сообщения: 1
Зарегистрирован: 15 сен 2011, 21:43

Re: Создание сервера с помощью Photon (основы)

Сообщение gnoblin 25 сен 2011, 00:09

skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Создание сервера с помощью Photon (основы)

Сообщение voe 26 сен 2011, 07:43

gnoblin писал(а):PUN хороший вариант (более простой в понимании и использовании),
правда я бы подождал версию 1.2 (скоро по-идее выпустят),
т.к. в 1.1 были косяки :).


Подскажи ссылку, а то не могу найти.
voe
UNIт
 
Сообщения: 65
Зарегистрирован: 11 июл 2011, 14:09

Re: Создание сервера с помощью Photon (основы)

Сообщение sp00n 26 сен 2011, 15:08

PUN - это Photon Unity Networking :)
Ты молод, креативен, талантлив?
Амбициозен, уверен в себе, полон свежих идей?
А делать хоть что-нибудь умеешь?!
sp00n
UNITрон
 
Сообщения: 254
Зарегистрирован: 27 фев 2010, 20:43

Re: Создание сервера с помощью Photon (основы)

Сообщение voe 26 сен 2011, 15:25

sp00n писал(а):PUN - это Photon Unity Networking :)


Спасибо, собственного его сейчас и ковыряю. Я так понимаю это просто прослойка для адаптации стандартной сети [unity 3D] для Photon`а?
voe
UNIт
 
Сообщения: 65
Зарегистрирован: 11 июл 2011, 14:09

Re: Создание сервера с помощью Photon (основы)

Сообщение gnoblin 26 сен 2011, 16:13

Да, простой API для фотона, повторяющий API и концепции юнити-сети.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Создание сервера с помощью Photon (основы)

Сообщение Eldar9x 01 окт 2011, 21:13

Зря вы, по моему, смотрите Photon Unity Network. В Unity сеть сама по себе выглядит как-то бесструктурно. Так теперь еще и этот костыль наложили поверх Photon. Надо же как-то отделять составные части игры друг от друга (сеть, графика)... Я изучал и продолжаю изучать фотон таким образом, и вам советую. Ставим себе задачу, которая включает сетевой обмен данными. Берем файлы PhotonCustomOperation.pdf, PhotonCustomEvent.pdf, BlankPhotonServerSetup.pdf, BlankPhotonClientSetup.pdf и начинаем поверх них наворачивать свой функционал. Кстати, тот же пример в unity, где в Update вызывается Service как то не совсем правилен. Обмен данными происходит на рендер сцены... Пробовал выносить в отдельный поток его вызов, но тут оказалось, что к объектам unity можно обращаться только в своем потоке. Ну в принципе, это можно обойти, наверное, может быть использовать, например, потокобезопасную очередь. Еще интересно бы попробовать написать приложение к фотону, скажем, на с++. Но там по сравнению с с# будет все немного сложнее. Примеры в cдк тоже имеются, хотя смотрел их только меьлком.
Eldar9x
UNец
 
Сообщения: 21
Зарегистрирован: 19 май 2011, 11:59

Re: Создание сервера с помощью Photon (основы)

Сообщение gnoblin 02 окт 2011, 00:49

Service вызывается до рендера.

PUN делает разработку на фотоне более казуальной (доступной гораздо бОльшей аудитории) - это хорошо и "unity style".
+Все исходники открыты и можно допилить как нравится.

Не понял про разделение "сети" и "графики", с этим по-моему всё ОК.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

Вернуться в Photon

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2