开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2052

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 588|回复: 15

[枫叶飘零] Photon Server之从头创建应用程序

[复制链接]  [移动端链接]
排名
2036
昨日变化
7

41

主题

212

帖子

1447

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
14
蛮牛币
5762
威望
0
注册时间
2013-10-30
在线时间
543 小时
最后登录
2018-1-16

专栏作家社区QQ达人

发表于 2017-12-27 19:16:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本教程将尝试帮助您了解如何从头开始构建应用程序。争取在10分钟内建立一个简单的聊天服务器。
我们假设您已经按照“5分钟Photon”中的步骤进行操作,并且拥有本地运行的Photon服务器。
本教程被认为是理解Photon Application和Peer中主要概念的基础知识的第一步。
    1、下载Photon Server SDK并解压缩。
    2、使用Visual Studio,创建一个新的类库项目ChatServer。
    3、添加引用到ExitGamesLibs.dll,Photon.SocketServer.dll和PhotonHostRuntimeInterfaces.dll

现在,创建一个从Photon.SocketServer.ApplicationBase继承的新类ChatServer:
1.png
创建一个从Photon.SocketServer.ClientPeer继承的新类ChatPeer:
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces;
public class ChatPeer : ClientPeer
{
    public ChatPeer(InitRequest initRequest)
        : base(initRequest)
    {
    }
    protected override void OnDisconnect(DisconnectReason disconnectCode, string reasonDetail)
    {
    }
    protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
    {
    }
}
在ChatServer.CreatePeer返回一个新的ChatPeer实例:
2.png
ChatServer程序集将由Photon本地核心加载到默认Photon实例上。 因此,服务器配置文件PhotonServer.config应包含该应用程序的正确定义。 以下片段说明了一个简单的方法来做到这一点:
3.png
此配置要求服务器二进制文件位于deploy / ChatServer / bin下,并且类ChatServer不属于命名空间。 有关服务器配置的更多信息,请关注我们公众号。
为聊天客户端创建一个新的控制台项目。 将对Photon3DotNet.dll的引用添加到新项目。 客户端代码应该如下所示。
using System;
using System.Collections.Generic;
using ExitGames.Client.Photon;
using System.Threading;
public class ChatClient : IPhotonPeerListener
{
    private bool connected;
    PhotonPeer peer;
    public static void Main()
    {
        var client = new ChatClient();
        client.peer = new PhotonPeer(client, ConnectionProtocol.Tcp);
        // connect
        client.DebugReturn(DebugLevel.INFO, "Connecting to server at 127.0.0.1:4530 using TCP");
        client.peer.Connect("127.0.0.1:4530", "ChatServer");
        // client needs a background thread to dispatch incoming messages and send outgoing messages
        client.Run();
        while (true)
        {
            if (!client.connected) { continue; }
            // read input
            string buffer = Console.ReadLine();
            // send to server
            var parameters = new Dictionary<byte, object> { { 1, buffer } };
            client.peer.OpCustom(1, parameters, true);
        }
    }
    private void UpdateLoop()
    {
        while (true)
        {
            peer.Service();
        }
    }
    public void Run()
    {
        Thread thread = new Thread(UpdateLoop);
        thread.IsBackground = true;
        thread.Start();
    }
    #region IPhotonPeerListener
    public void DebugReturn(DebugLevel level, string message)
    {
        Console.WriteLine(string.Format("{0}: {1}", level, message));
    }
    public void OnEvent(EventData eventData)
    {
        DebugReturn(DebugLevel.INFO, eventData.ToStringFull());
        if (eventData.Code == 1)
        {
            DebugReturn(DebugLevel.INFO, string.Format("Chat Message: {0}", eventData.Parameters[1]));
        }
    }
    public void OnMessage(object messages)
    {
        throw new NotImplementedException();
    }
    public void OnOperationResponse(OperationResponse operationResponse)
    {
        DebugReturn(DebugLevel.INFO, operationResponse.ToStringFull());
    }
    public void OnStatusChanged(StatusCode statusCode)
    {
        if (statusCode == StatusCode.Connect)
        {
            connected = true;
        }
        switch (statusCode)
        {
            case StatusCode.Connect:
                DebugReturn(DebugLevel.INFO, "Connected");
                connected = true;
                break;
            default:
                DebugReturn(DebugLevel.ERROR, statusCode.ToString());
                break;
        }
    }
    #endregion
}
如果我们现在启动服务器,客户端将能够连接并发送文本消息。 处理这些文本消息的服务器逻辑仍然丢失。 为了验证消息是否被接收到,我们在ChatPeer.OnOperationRequest中使用OperationResponse来回应。
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
    // send operation response (~ACK) back to peer
    var response = new OperationResponse(operationRequest.OperationCode);
    SendOperationResponse(response, sendParameters);
}
聊天客户端现在应该能够打印事件代码和聊天消息。
接下来我们要做的是接收其他客户端上的聊天消息。 我们使用发布/订阅模式来实现接收器。
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces;
using System;
public class ChatPeer : ClientPeer
{
    public ChatPeer(InitRequest request)
        : base(request)
    {
        BroadcastMessage += OnBroadcastMessage;
    }
    private static event Action<ChatPeer, EventData, SendParameters> BroadcastMessage;
    protected override void OnDisconnect(DisconnectReason disconnectCode, string reasonDetail)
    {
        BroadcastMessage -= OnBroadcastMessage;
    }
    protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
    {
        if (operationRequest.OperationCode == 1) // Chat Custom Operation Code = 1
        {
            // broadcast chat custom event to other peers
            var eventData = new EventData(1) { Parameters = operationRequest.Parameters }; // Chat Custom Event Code = 1
            BroadcastMessage(this, eventData, sendParameters);
            // send operation response (~ACK) back to peer
            var response = new OperationResponse(operationRequest.OperationCode);
            SendOperationResponse(response, sendParameters);
        }
    }
    private void OnBroadcastMessage(ChatPeer peer, EventData eventData, SendParameters sendParameters)
    {
        if (peer != this) // do not send chat custom event to peer who called the chat custom operation
        {
            SendEvent(eventData, sendParameters);
        }
    }
}
如果现在启动两个客户端,两个客户端都可以交换消息。 不要忘记启动Photon服务器或使用新配置重新启动它。


回复

使用道具 举报

排名
2036
昨日变化
7

41

主题

212

帖子

1447

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
14
蛮牛币
5762
威望
0
注册时间
2013-10-30
在线时间
543 小时
最后登录
2018-1-16

专栏作家社区QQ达人

 楼主| 发表于 2017-12-27 19:17:20 | 显示全部楼层
不管你有关于Photon产品的问题或者是Photon价格问题或者Photon教程方面的问题或者其他问题都可以联系我们给我我们留言,我们真诚的为您服务。关注公众号PhotonServer获取等多新鲜资讯。

回复 支持 反对

使用道具 举报

7日久生情
2038/5000
排名
4504
昨日变化
34

2

主题

1496

帖子

2038

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
241666
好友
0
蛮牛币
8060
威望
0
注册时间
2017-9-6
在线时间
278 小时
最后登录
2018-1-16
发表于 2017-12-28 07:35:52 来自Mobile--- | 显示全部楼层
感谢分享

回复

使用道具 举报

6蛮牛粉丝
1391/1500
排名
4604
昨日变化
3

0

主题

904

帖子

1391

积分

Rank: 6Rank: 6Rank: 6

UID
189581
好友
0
蛮牛币
1761
威望
0
注册时间
2016-12-5
在线时间
231 小时
最后登录
2018-1-15
发表于 2017-12-28 08:16:14 | 显示全部楼层
赞赞赞  给力啊啊啊

回复 支持 反对

使用道具 举报

3偶尔光临
238/300
排名
14235
昨日变化
319

1

主题

90

帖子

238

积分

Rank: 3Rank: 3Rank: 3

UID
216830
好友
1
蛮牛币
235
威望
0
注册时间
2017-4-9
在线时间
105 小时
最后登录
2018-1-16
发表于 2017-12-28 09:31:18 | 显示全部楼层
6666666666666666

回复 支持 反对

使用道具 举报

3偶尔光临
285/300
排名
8178
昨日变化
89

0

主题

61

帖子

285

积分

Rank: 3Rank: 3Rank: 3

UID
242860
好友
0
蛮牛币
311
威望
0
注册时间
2017-9-12
在线时间
108 小时
最后登录
2018-1-16
发表于 2017-12-28 09:32:54 | 显示全部楼层
666666666666666666666666666
[发帖际遇]: WangChen_0711 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
715/1000
排名
3849
昨日变化
2

0

主题

174

帖子

715

积分

Rank: 5Rank: 5

UID
203671
好友
1
蛮牛币
1337
威望
0
注册时间
2017-1-20
在线时间
233 小时
最后登录
2018-1-12

迈向小康

发表于 2017-12-28 09:42:16 | 显示全部楼层
6666666666666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1080/1500
排名
6208
昨日变化
59

0

主题

766

帖子

1080

积分

Rank: 6Rank: 6Rank: 6

UID
219676
好友
0
蛮牛币
596
威望
0
注册时间
2017-7-12
在线时间
140 小时
最后登录
2018-1-16
发表于 2017-12-28 09:45:49 | 显示全部楼层
谢谢分享

回复

使用道具 举报

4四处流浪
446/500
排名
4438
昨日变化
21

0

主题

61

帖子

446

积分

Rank: 4

UID
52730
好友
1
蛮牛币
696
威望
0
注册时间
2014-11-3
在线时间
121 小时
最后登录
2018-1-16
发表于 2017-12-28 10:18:58 | 显示全部楼层
很好的文章,谢谢啦。

回复 支持 反对

使用道具 举报

3偶尔光临
153/300
排名
11085
昨日变化
148

4

主题

39

帖子

153

积分

Rank: 3Rank: 3Rank: 3

UID
195502
好友
0
蛮牛币
152
威望
0
注册时间
2016-12-23
在线时间
42 小时
最后登录
2018-1-16
发表于 2017-12-28 11:09:29 | 显示全部楼层
666666666666666666

回复 支持 反对

使用道具 举报

3偶尔光临
221/300
排名
13130
昨日变化
5

0

主题

134

帖子

221

积分

Rank: 3Rank: 3Rank: 3

UID
250350
好友
0
蛮牛币
343
威望
0
注册时间
2017-10-23
在线时间
37 小时
最后登录
2018-1-11
发表于 2017-12-28 18:34:47 | 显示全部楼层
感谢分享

回复

使用道具 举报

2初来乍到
103/150
排名
13916
昨日变化
305

4

主题

26

帖子

103

积分

Rank: 2Rank: 2

UID
192441
好友
0
蛮牛币
146
威望
0
注册时间
2016-12-15
在线时间
31 小时
最后登录
2018-1-16
发表于 2017-12-28 19:09:48 | 显示全部楼层
好文章有帮助

回复

使用道具 举报

排名
26884
昨日变化
37

0

主题

24

帖子

46

积分

Rank: 1

UID
186188
好友
0
蛮牛币
11
威望
0
注册时间
2016-11-23
在线时间
12 小时
最后登录
2018-1-15
发表于 2017-12-29 00:27:01 | 显示全部楼层

6666666666666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1325/1500
排名
1239
昨日变化
2

0

主题

133

帖子

1325

积分

Rank: 6Rank: 6Rank: 6

UID
148134
好友
0
蛮牛币
1993
威望
0
注册时间
2016-5-10
在线时间
386 小时
最后登录
2018-1-16
QQ
发表于 2017-12-29 09:04:37 | 显示全部楼层
感谢分享

回复

使用道具 举报

5熟悉之中
819/1000
排名
5147
昨日变化
46

26

主题

356

帖子

819

积分

Rank: 5Rank: 5

UID
219600
好友
4
蛮牛币
1540
威望
0
注册时间
2017-4-27
在线时间
217 小时
最后登录
2018-1-16
发表于 2017-12-29 09:27:58 | 显示全部楼层
感谢分享

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表