Photon基础开发框架

Photon (v4)的基本框架。开发框架主要Photon和游戏逻辑(C#)两个部分,如下图最新的Photon v4支持的4种底层协议,游戏开发逻辑Photon目前主要划分为Load Balancing 和MMO(大型多人同时在线游戏)。

一、Photon服务端示例

1、服务端开发

新建解决方案TestPhotonServer并新建类库项目MyPhotonServer,类库添加Photon引用(可在photon安装目录的lib里找到)

Photon.SocketServer.dll
PhotonHostRuntimeInterfaces.dll

为什么新建类库项目呢?所有的Photon的服务端程序都是先编译成dll,再由PhotonControl.exe通过配置文件调用运行的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer; namespace MyPhotonServer
{
public class MyServerApplication:ApplicationBase
{
protected override PeerBase CreatePeer(InitRequest initRequest)
{
return new MyServerPeer(initRequest);
} protected override void Setup()
{
//初始化 } protected override void TearDown()
{
//关闭
}
}
}

MyServerApplication

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces; namespace MyPhotonServer
{
public class MyServerPeer:ClientPeer
{
public MyServerPeer(InitRequest initRequest)
: base(initRequest)
{ }
protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
{
//响应客户端的断开连接
} protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
//响应客户端的操作请求 }
}
}

MyServerPeer

看代码,这里是一个最简单的Photon服务端:

1、Application为服务端程序入口,所有开发者自己的程序都要有一个继承ApplicationBase的类的程序入口

2、Peer为服务端与客户端的对等通信点,服务端和客户端都通过各自的Peer进行通信.

3、V4版本的Photon对.Net的开发API做了调整,在原来的PeerBase基础上又更加细化出不同分工的Peer,这里调用ClientPeer,可以看到官方源码里并ClientPeer并没有什么东西,细心的朋友可以思考为什么这么做

public abstract class ClientPeer : PeerBase
{
// Methods
protected ClientPeer(InitRequest initRequest) : base(initRequest)
{
}
}

2、服务端部署

1、PhotonControl.exe:首先所有的Photon的服务端程序都是先编译成dll,再通过配置由PhotonControl.exe调用运行的。

2、PhotonServer.config文件:PhotonControl的运行目录中会找到这个文件,主要进行配置开发者程序来给PhotonControl调用。

3、log:PhotonControl.exe会在运行根目录生成日志,另外会在deploy下生成所有服务端的一个日志文件log。

部署:

在deploy目录下建一个文件夹TestPhotonServer, 右键我们的服务端类库项目属性将Release的dll重定向下。注意要把dll设置在TestPhotonServer里新建的bin目录里

(由于示例很简单Release时候Photon.SocketServer.dll、PhotonHostRuntimeInterfaces.dll、ExitGamesLibs.dll这几个dll没有发布到bin,这里手动复制到deploy下的TestPhotonServer/bin里面)

配置PhotonServer.config

添加Application节点到PhotonServer.config的Applications下,这里我放到loadBlancing下的Applications

      <Application
Name="TestPhotonServer"
BaseDirectory="TestPhotonServer"
Assembly="MyPhotonServer"
Type="MyPhotonServer.MyServerApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>

Name:服务器程序名称

BaseDirectory:设置的是deploy目录为基础设置,这里服务端程序文件夹在deploy里的TestPhotonServer

Assembly:Application入口程序所在的namespace

Type:入口类的完整限定性名称

ForceAutoRestart:顾名思义强制重启

WatchFiles:调用的文件后缀,dll和config

ExcludeFiles:一般是日志配置文件名称

运行PhotonControl.exe的loadBalancing就可以看到自定义的服务端已经运行

二、客户端

客户端暂时用简单的控制台,解决方案下添加一个控制台项目, 添加引用Photon3DotNet.dll

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ExitGames.Client.Photon; namespace MyPhotonClient
{
class MyPhotonClientPeerListener : IPhotonPeerListener
{
public bool IsConnect = false; public void DebugReturn(DebugLevel level, string message)
{ } public void OnEvent(EventData eventData)
{ } public void OnMessage(object messages)
{ } public void OnOperationResponse(OperationResponse operationResponse)
{ } public void OnStatusChanged(StatusCode statusCode)
{
//与服务器连接状态发生改变 Console.WriteLine("当前与服务端连接状态:"+statusCode); switch (statusCode)
{
case StatusCode.Connect:
IsConnect = true;
break; } }
}
}

MyPhotonClientPeerListener

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ExitGames.Client.Photon; namespace MyPhotonClient
{
class Program
{
static void Main(string[] args)
{
MyPhotonClientPeerListener listener = new MyPhotonClientPeerListener(); PhotonPeer peer = new PhotonPeer(listener, ConnectionProtocol.Udp); if (peer.Connect("localhost:5055","MyServer"))
{
Console.WriteLine("客户端准备连接请求……"); while (!listener.IsConnect)
{
Console.WriteLine("连接中……");
peer.Service();
System.Threading.Thread.Sleep(); }
Console.WriteLine("已连接……"); //peer.Disconnect(); Console.ReadKey(); }
else
{
Console.Write("未找到服务器");
} } }
}

Program

1、IPhotonPeerListener接口主要有5个方法

DebugReturn方法:主要提供各类错误与警告【供开发者】查看,在开发状态下协助开发者纠错。比如:讲上面客户端Program.cs里的地址localhost:5055,改成localhost:5050运行的时候还是会不停的请求,但是无法成功连接,程序是不会报错的。这个时候我们在DebugReturn方法里打印一下message帮助查找问题源

OnEvent(EventData eventData):处理Photon Server发送过来给客户端处理的事件。Event用于客户端和服务端沟通,操作(Operation)通常会触发Event,可以通过Event Code直到事件类型。时间的消息内容通常包含着它的Parameters里。这里暂作简单介绍

OnMessage(object messages):消息回调函数

OnOperationResponse(OperationResponse operationResponse):响应Operation的回调函数,比如加入游戏房间操作,服务器会分配给每个客户端一个编号。这个Client的编号就可以通过响应回调函数获取

OnStatusChanged(StatusCode statusCode):连接状态函数,当游戏的异步操作完成活发生错误时候,状态发生改变回调这个函数

2、PhotonPeer类

PhotonPeer主要功能是客户端和Photon Server 通信。可以理解为对等通信点或者勉强理解为信使。PhotonPeer通过listener和通信协议和服务端通信。。每个Application都可以有多个PhotonPeer,但是每一个不同的PhotonPeer都应该有自己listener用来监听事件、操作、回调函数。这里的listener就是继承IPhotonPeerListener接口的类的实例。

peer.Connect调用的时候并不会直接去连接服务器,只有当peer.service()调用的时候才会向服务器发送请求。

后文再详解

Photon开发实战(2)——开发框架、第一个Photon程序的更多相关文章

  1. yii2实战教程之第一个Yii程序

    之前考虑过要不要砍掉该章节,直接上手教你搭建简单的博客系统.出于实战基础加之自C语言的书籍出版以来,几乎所有的编程书籍都讲述了一个Hello World的例子作为开始.虽然我们仅仅是学习Yii2,但是 ...

  2. 微信小程序开发(一)创建一个小程序Hello World!

    开发微信小程序并不是很难,网上有很多小程序开发资料,尤其是微信官方的<小程序开发指南>最详细. 下面是我开发小程序的历程: 第一步,请前往https://mp.weixin.qq.com/ ...

  3. WIN10下java8的开发环境配置与第一个java程序

    一.开发环境配置 1.在官网上下载jdk-8u111-windows-x64.exe 2.运行安装包,可以自定义安装路径 3.进入环境变量设置: 计算机右键-->属性-->高级系统设置-- ...

  4. 混合开发的大趋势之 一个Android程序员眼中的 React.js 箭头函数,const, PropTypes

    转载请注明出处:王亟亟的大牛之路 昨天写了篇React.js的开头之作,讲了讲块级作用域和let,先安利:https://github.com/ddwhan0123/Useful-Open-Sourc ...

  5. 混合开发的大趋势之 一个Android程序员眼中的 React.js 块级作用域 和 let

    转载请注明出处:王亟亟的大牛之路 最近都有事干然后,快到月底了这个月给CSDN的博文也就两篇,想想也蛮多天没更了,那就来一篇. 老规矩,先安利:https://github.com/ddwhan012 ...

  6. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:第一个Spring程序

    1. 创建项目 在 MyEclipse 中创建 Web 项目 springDemo01,将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将添加到类路径下,添加后的项目如图 2. ...

  7. 微信小程序开发(二)创建一个小程序页面

    为了方便讲解,我们将上篇博客创建的小程序除了project.config.json和sitemap.json两个文件保留,其他全部删除(这两个文件存的是小程序的创建信息,删掉会有报错提示). 接下来我 ...

  8. 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买

    作者图书京东链接,请点击------>>>    **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...

  9. 跟着学!教你开发第一个Java程序

    今天我们的目标是开发人生中的第一个Java程序,虽然可能会很简单,但是这小小的一步却是跨入IT行业的一大步!下面我们来一起来仔细的了解开发的流程. 准备工作 1,作为一名准程序猿自备一台电脑那是必不可 ...

随机推荐

  1. leecode 树是否是平衡树 java

    https://oj.leetcode.com/problems/validate-binary-search-tree/ 1.中序遍历是否有序 /** * Definition for binary ...

  2. poj 3237 Tree(树链剖分,线段树)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 7268   Accepted: 1969 Description ...

  3. Java--创建线程及常用方法

    继承java.lang.Thread类--Thread类代表线程类  它的常用方法如下: static Thread currentThread():返回当前正在运行的线程对象的引用. static ...

  4. C语言宏与单井号(#)和双井号(##)

    C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结.关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操 ...

  5. hdoj 2035 人见人爱A^B

    人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. SOA技术的进化史

    SOA 是一种程序设计思想,其实早在远古时代(计算机史)它就已经出现了.无非就是把系统分解,将数据和业务逻辑部分尽量独立出来,然后以服务形式提供给另外的系统共用. 那时也有一些可以实现 SOA 的工具 ...

  7. HttpClient中post请求http、https示例

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

  8. Spring Aop重要概念介绍及应用实例结合分析

    转自:http://bbs.csdn.net/topics/390811099 此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题.最近项目中遇到了以下几点需求,仔细 ...

  9. java读取properties

    Java读取properties文件的方法比较多,网上我最多的文章是“Java读取properties文件的六种方法”,我看了好多的文章,在读到“博客之星-熔岩”的“Java读取properties文 ...

  10. 【转】android错误 aapt.exe已停止工作的解决方法

    http://www.jb51.net/article/57420.htm 在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示, ...