Среда, 18 Декабря 2024, 13:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
взаимодействие двух серверов
kelodДата: Среда, 20 Февраля 2013, 20:29 | Сообщение # 1
был не раз
Сейчас нет на сайте
пытаюсь писать онлайн игру, структура такова:
игра состоит из меню и собственно комнат, где игроки играют, соответственно за работу меню отвечает один сервер, за работу игровой комнаты другой, вопрос как обмениваться данными между этими серверами?
в качестве серверов использую Photon, код написан на C# клиент Unity, код тоже на шарпе

собственно сами сервера состоит из двух классов и по сути будут аналогичные, различающиеся только обрабатываемыми данными :

класс PhotonServer
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ExitGames.Logging;
using ExitGames.Logging.Log4Net;
using log4net.Config;
using Photon.SocketServer;
using System.IO;

namespace PhotonGame
{
  public class PhotonServer : ApplicationBase
  {

   protected override PeerBase CreatePeer(InitRequest initRequest)
   {
    //throw new NotImplementedException();
    return new UnityClient(initRequest.Protocol, initRequest.PhotonPeer);
   }
   protected override void Setup()
   {

    var file = new FileInfo(Path.Combine(BinaryPath, "log4net.config"));
    if (file.Exists)
    {
     LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
     XmlConfigurator.ConfigureAndWatch(file);
    }
   }
   protected override void TearDown()
   {
   }
  }
}

класс UnityClient
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Photon.SocketServer;
using ExitGames.Logging;
using PhotonHostRuntimeInterfaces;
//using MySql.Data.MySqlClient;
using System.Collections;

namespace PhotonGame
{
  public class UnityClient : PeerBase
  {
   private readonly ILogger Log = LogManager.GetCurrentClassLogger();
   public UnityClient(IRpcProtocol protocol, IPhotonPeer peer)
    : base(protocol, peer)
   {
    Log.Debug("Connection:" + peer.GetRemoteIP());
   }
   protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
   {
    Log.Debug("Disconnected");
   }

   protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
   {
    Log.Debug("Unknown operation");
   }
  }
}

Добавлено (18.02.2013, 13:48)
---------------------------------------------
и не одного ответа....

Добавлено (20.02.2013, 20:29)
---------------------------------------------
да уж гуру видно от зимней спячки не очнулись ещё....

IIyxMASTERДата: Четверг, 21 Февраля 2013, 05:11 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
да нет, всем просто пофиг.
Лезть в дебри фотона и чужого кода нет никакого желания.
2 сервера связываются между собой так же, как клиент с сервером. Первый коннектиться ко второму и передает ему всю необходимую информацию. Вроде это настолько очевидно, что даже непонятно, как ты мог до этого не догадаться.
Можно еще использовать голубиную почту
BlusДата: Понедельник, 25 Февраля 2013, 17:22 | Сообщение # 3
участник
Сейчас нет на сайте
По коду быстро пробежался.
И вот мой совет сделай синхронизацию между двумя серверами.
А если используешь БД то сделать можно так сервер игровой комнаты изменяет или вносит новые данные о игроке (статистика) а сервер меню их отображает
Если нужно будет сделать вход в игру то проверку делай в сервере меню и первоначальную загрузку данных.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг