1. 程式人生 > >自己做遊戲(一)-PhotonServer配置

自己做遊戲(一)-PhotonServer配置

       感覺時間過得好快,不知不覺接觸Unity一年多了,當初學習Unity的目的就是為了自己做遊戲,可惜現在的遊戲行業一片混亂,各種賣情懷....(多的不想說了,頗有一種學醫救不了中國的感覺),現在自己從事VR行業,感覺也不是自己想追求的,說實話,自己也感覺比較迷茫,不知道以後何去何從,忽然想起以前不知是誰說的一句話"不忘初心,方得始終",既然如此,就自己做一個遊戲,當做這一年多以來學習Unity的作業吧!

       廢話不多說了,今天開始找了許多資源,想做一個MOBA類的遊戲,初步決定遊戲伺服器使用PhotonServer,以下記錄一下PhotonServer的啟動設定吧   

       首先安裝好PhotonServer,用VS新建一個類庫,引用PhotonServer安裝目錄lib下的5個類庫ExitGames.Logging.Log4Net.dll、ExitGamesLibs.dll、log4net.dll、Photon.SocketServer.dll、PhotonHostRuntimeInterfaces.dll,

建立Server類:

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

namespace MobaServer2._0
{
    public class MobaServer : ApplicationBase
    {
        protected override PeerBase CreatePeer(InitRequest initRequest)
        {
            return new MobaClient(initRequest);
        }
        /// <summary>
        /// 伺服器初始化
        /// </summary>
        protected override void Setup()
        {
            InitLogging();
            LogInfo("-----------------------");
            LogInfo("Server is Setup");
        }
        /// <summary>
        /// 伺服器關閉
        /// </summary>
        protected override void TearDown()
        {
            LogInfo("Server is Down");
        }


        #region 日誌功能

        private static readonly ILogger log = ExitGames.Logging.LogManager.GetCurrentClassLogger();
        /// <summary>
        /// 初始化日誌
        /// </summary>
        private void InitLogging()
        {
            ExitGames.Logging.LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
            GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(this.ApplicationRootPath, "log");
            GlobalContext.Properties["LogFileName"] = "Moba2.0"; //this.ApplicationName+"2.0";
            XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.Combine(this.BinaryPath, "log4net.config")));
        }
        /// <summary>
        /// 日誌輸出
        /// </summary>
        /// <param name="str"></param>
        public static void LogInfo(string str)
        {
            log.Info(str);
        }
        #endregion


    }
}

實現基類的MobaClient類如下:

using Photon.SocketServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PhotonHostRuntimeInterfaces;

namespace MobaServer2._0
{
    public class MobaClient : ClientPeer
    {
        /// <summary>
        /// 構造
        /// </summary>
        /// <param name="initRequest"></param>
        public MobaClient(InitRequest initRequest) : base(initRequest)
        {

        }
        /// <summary>
        /// 客戶端斷開連線
        /// </summary>
        /// <param name="reasonCode"></param>
        /// <param name="reasonDetail"></param>
        protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
        {
            
        }
        /// <summary>
        /// 客戶端向伺服器發起請求
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            
        }
    }
}


從deploy\Loadbalancing\GameServer\bin目錄下複製一個log4net.config檔案到VS目錄下,選擇始終複製,這樣就可以在Log資料夾下檢視輸出日誌了

在deploy資料夾下建一個Moba\bin資料夾,選擇生成路徑生成

配置PhotonServer.config檔案如下:

Name:專案名字

BaseDirectory:根目錄,deploy資料夾下為基礎目錄

Assembly :是在生成的類庫中的bin目錄下與我們專案名稱相同的.dll檔案的名字

Type:是主類的全稱,在這裡是:MyServer.MyApplication,一定要包括名稱空間

EnableAutoRestart:是否是自動啟動,表示當我們替換伺服器檔案時候,不用停止伺服器,替換後photon會自動載入檔案

WatchFiles和ExcludeFiles

這段程式碼放在<Default><Applications>放這裡</Applications></Default>節點下面



最後.執行!