Unity3d游戏客户端与Photon服务器数据通信
2017-10-20 16:37
176 查看
原文地址:blog.liujunliang.com.cn
上篇文章介绍到Photon服务器部署本文在上一篇博文的基础上继续介绍使用Unity3d游戏客户端与Photon Server数据通信
打开Unity3d2017,新建项目,在Asset目录下新建Plugins文件夹
找到Photon SDK目录下的lib文件PhotonUnity3D.dll文件,将其拖动到Unity Plugins目录下
新建一个脚本,这里我命名为GamContext,将其挂载到场景空对象中
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using ExitGames.Client.Photon;
public class GameContext : MonoBehaviour,IPhotonPeerListener
{
private PhotonPeer peer;
public void DebugReturn(DebugLevel level, string message)
{
}
//接收服务器发来的事件
public void OnEvent(EventData eventData)
{
switch (eventData.Code)
{
case 0:
//获取事件数据
object value = eventData.Parameters.FirstOrDefault(q => q.Key == 1).Value;
Debug.Log(value.ToString());
break;
default:
break;
}
}
//接收响应数据(客户端发送了请求)
public void OnOperationResponse(OperationResponse operationResponse)
{
int operationCode = operationResponse.OperationCode;
switch (operationCode)
{
case 0:
//读取数据包
Dictionary<byte, object> responsedata = operationResponse.Parameters;
object value = responsedata.FirstOrDefault(q => q.Key == 1).Value;
Debug.Log(value.ToString());
break;
default:
break;
}
}
//连接状态发送改变
public void OnStatusChanged(StatusCode statusCode)
{
Debug.Log("数据连接状态发生的改变:" + statusCode);
}
private void Start()
{
//传输协议UDP 、 通过Listener接收服务器端的响应
peer = new PhotonPeer(this, ConnectionProtocol.Udp);
//连接本地服务器
peer.Connect("127.0.0.1:5055", "MYGameServer");
GameObject.Find("SendRequest").GetComponent<Button>().onClick.AddListener(()=> {
//传输数据
Dictionary<byte, object> myData = new Dictionary<byte, object>();
myData.Add(1,"刘俊良");
myData.Add(2, 20);
//向服务器发送数据请求
peer.OpCustom(0, myData, true);
});
}
private void Update()
{
//和服务器实时保持数据连接
peer.Service();
}
private void OnDestroy()
{
if (peer != null && peer.PeerState == PeerStateValue.Connected)
{
//断开连接
peer.Disconnect();
}
}
}
同时在服务器端中的ClientPeer类中对数据请求函数进行修改
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces;
namespace MyGameServer
{
class ClientPeer : Photon.SocketServer.ClientPeer
{
public ClientPeer(InitRequest ir) : base(ir) { }
//该客户端断开连接
protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
{
}
//该客户端出操作请求
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
{
/*****解析客户端请求数据*****/
ReadRequestData(operationRequest);
/****************************/
/*****向客户端发送响应*****/
OperationResponse operationResponse = new OperationResponse();
operationResponse.OperationCode = 0;
//数据包
operationResponse.Parameters = new Dictionary<byte, object> { { 1, "数据提交成功" } };
//向客户端发送请求响应
SendOperationResponse(operationResponse, sendParameters);
/**************************/
/*****向客户端发送事件*****/
EventData eventData = new EventData(0, new Dictionary<byte, object> { { 1, "服务器事件" } });
SendEvent(eventData, new SendParameters());
/**************************/
}
private void ReadRequestData(OperationRequest operationRequest)
{
int operationCode = operationRequest.OperationCode;
switch (operationCode)
{
case 0:
Dictionary<byte, object> requestData = operationRequest.Parameters;
object value1 = requestData.FirstOrDefault(q => q.Key == 1).Value;
object value2 = requestData.FirstOrDefault(q => q.Key == 2).Value;
MyGameServer.LOG.Info("数据一:" + value1 + "数据二:" + value2);
break;
default:
break;
}
}
}
}
重新生成项目
打开PhotonServer,开启MyGameServer
运行Unity3d,点击按钮,向服务器发送请求
此时Debug正常打印,查看MyGameServer.log日志文件也正常输出
这里我总结了下客户端与服务器端数据交互流程,如图所示
原文地址:blog.liujunliang.com.cn
相关文章推荐
- 一种即时通信数据传输方法、客户端、服务器及系统
- android客户端与javaweb服务器端数据通信-Post-Json格式数据
- Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
- MFC网络通信传输结构体(服务器获取MYSQL数据库数据传给客户端)
- 客户端通过TCP通信分页从服务器获取数据
- JS模拟APP客户端向服务器POST RSA加密的通信数据
- android客户端与javaweb服务器端数据通信-异步Get
- 客户端通过TCP通信分页从服务器获取数据
- android客户端与javaweb服务器端数据通信-Post-键值对
- 数据通信之数据转码字节映射加密发送:客户端c++和服务器java
- TCP通信的服务器(两个客户端通过服务器进行数据中转)
- 数据通信之数据转码字节映射加密发送:客户端c++和服务器java
- socket通信,TCP协议,有多个客户端,服务器怎么向指定IP及端口的客户端发送数据!
- 客户端通过TCP通信分页从服务器获取数据
- UDP数据读写以及服务器客户端的通信
- 客户端和服务器之间通信讲解
- JAVA中Socket服务器/客户端的通信
- COMET服务器推技术 – 实现Web服务器“主动”向客户端发送数据
- Epoll 的tcp通信代码(服务器+客户端)
- C#和PHP Socket通信实例代码(服务器与客户端通信)