一.创建taidou服务器端的工程
1.打开VS,因为是服务器端的程序,所以新建一个类库类型的TaidouServer项目
2.在TaidouServer里添加(5个类库:ExitGamesLibs.dll” “Photon.SocketServer.dll” “PhotonHostRuntimeInterfaces.dll”,ExitGames.Logging.Log4Net.dlllog4net.dll,log4net.dll)
路径为G:\photon server\photon\Photon-OnPremise-Server-SDK_v4-0-29-11263\lib
其中类库ExitGames.Logging.Log4Net.dlllog4net.dll和log4net.dll是用来日志输出的。
3.创建服务器端的启动类,及继承 Applicationbase的类TaidouApplication,实现ApplicationBase的抽象类。
接着创建一个PeerBase类ClientPeer,用来跟客户端进行交互。需继承Peer,然后实现抽象类。在ClientPeer类里创建一个空的构造方法,用来传递PeerBase需要的参数
//此构造方法用来传递TaidouApplication中PeerBase需要的参数。 IPhotonPeer就是客户端与服务器端交互的PhotonPeer类,当服务器端与客户端交互时,PhotonPeer会传递过来,他里面的参数我们可以通过PhotonPeer来取到
public ClientPeer(IRpcProtocol protocol, IPhotonPeer peer)
: base(new InitRequest (protocol, peer))
{ }
在TaidouApplication这边,当一个客户端连接到服务器端时,我们需要创建一个ClientPeer,及return一个ClientPeer
protected override PeerBase CreatePeer(InitRequest initRequest)
{
return new ClientPeer(initRequest.Protocol, initRequest.PhotonPeer);//把协议的名称initRequest.Protocol和 initRequest.PhotonPeer传递过来
}
去掉其余抽象方法的抛出异常。
二.利用Log4Net给服务器添加日志输出的功能
方便我们调试,追踪错误,跟踪服务器的状态
1.用VS打开LoadBalancing。路径:G:\photon server\photon\Photon-OnPremise-Server-SDK_v4-0-29-11263\src-server\Loadbalancing\LoadBalancing里
找到4行代码复制到TaidouApplication的Setup里
protected override void Setup()
{
//这4行代码是从G:\photon server\photon\Photon-OnPremise-Server-SDK_v4-0-29-11263\src-server\Loadbalancing\LoadBalancing里的LoadBalancing里的LoadBalancing/MasterServer/MasterApplication的setup里的
ExitGames.Logging.LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);//使用日志,首先要设置Log的工厂,工厂使用了Log4Net的一个实现
//接下来可以认为是设置两个变量的值的
GlobalContext.Properties["Photon:ApplicationLogPath"] = Path.Combine(this.ApplicationRootPath, "log");//用来设置Photon:ApplicationLogPath属性的值的。Photon:ApplicationLogPath根据名字可以知道是一个日志的路径 this.ApplicationRootPath指的是应用的根目录G:\photon server\photon\Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy
GlobalContext.Properties["LogFileName"] = "TD" + this.ApplicationName;//用来表示生成日志的名字的
XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.Combine(this.BinaryPath, "log4net.config")));//用来指明Log4Net需要一个配置文件,配置文件叫log4net.config
//由于没有log4net.config配置文件,需要从G:\photon server\photon\Photon-OnPremise-Server-SDK_v4-0-29-11263\src-server\Loadbalancing\LoadBalancing里拉到本项目里
log.Debug("Application setup complete");
}
接下来需要修改log4net.config里的代码。把里面name=”Photon.LoadBalancing”的配置删除掉。进行日志功能初始化化后我们就能使用private static readonly ILogger log = ExitGames.Logging.LogManager.GetCurrentClassLogger();去得到一个日志输出的类,然后运用log.Debug进行日志输出。
2.部署Server,添加Server的配置
设置TaidouServer的输出路径,设置log4net.config配置文件的复制到输出目录的属性为始终复制
配置PhotonServer的配置文件,打开bin_Win64下边的PhotonServer.config来进行配置服务器
修改log4net.config里的root标签为 value=”DEBUG”及如下所示:
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
三.创建服务器端发起请求处理的基本架构
1.在TaidouServer项目里添加一个新的类库工程TaidouCommon.用来创建一些服务器端与客户端共享的类的。比如OperationCode
创建一个类OperationCode,并将其修改成枚举类型。
//OperationCode操作代码,用来代表当前操作是一个登录的请求还是别的请求,用来表示请求的类型的。
public enum OperationCode:byte
{
Login,
GetServer,
Register,
Role
}
在TaidouServer里添加引用解决方案TaidouCommon。在TaidouServer下创建一个Handlers的文件夹。Handler是一个处理器,是用来处理服务器客户端的请求的。在Handlers里创建一个类HandlerBase,HandlerBase是所有Handler共有的父类。
让TaidouApplication去管理每一个Handler,创建一个字典来存储所有的Handler
public Dictionary<byte, HandlerBase> handlers = new Dictionary<byte, HandlerBase>();
2.创建一个登录请求LoginHandler,使其继承自HandlerBase,并为public。
在TaidouApplication里添加一个注册的方法,用于把所有的Handler注册给TaidouApplication,让TaidouApplication知道当前有哪些处理的Handler,然后来请求时,根据请求的OperationCode来识别使用什么样的Handler去处理