PhotonServer 学习

时间:2023-03-08 20:16:49
PhotonServer 学习

版本:Photon-OnPremise-Server-SDK_v3-4-31-10808

输出文件夹:deploy/名称/bin

PhotonServer.config 配置

 <Applications Default="ChatServer">
<Application
Name="ChatServer"
BaseDirectory="ChatServer"
Assembly="ChatServer"
Type="ChatServer.ChatServer"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>

Server端:

引用 ExitGamesLibs.dll,Photon.SocketServer.dll,PhotonHostRuntimeInterfaces.dll

 using System;
using Photon.SocketServer; namespace ChatServer {
class ChatServer:ApplicationBase { //收到客户端请求创建一个新的PeerBase
protected override PeerBase CreatePeer(InitRequest initRequest) {
return new ChatPeer(initRequest.Protocol,initRequest.PhotonPeer);
} protected override void Setup() { } protected override void TearDown() { }
}
}

ChatServer

 using System;
using System.Collections.Generic;
using Photon.SocketServer;
using PhotonHostRuntimeInterfaces; namespace ChatServer { //继承PeerBase
class ChatPeer:PeerBase { //构造函数1
public ChatPeer(InitRequest initRequest) : base(initRequest) { } //构造函数2
public ChatPeer(IRpcProtocol iRpcProtocol,IPhotonPeer iPhotonPeer) : base(iRpcProtocol,iPhotonPeer) { } protected override void OnDisconnect(DisconnectReason reasonCode,string reasonDetail) { } //收到客户端请求时执行
protected override void OnOperationRequest(OperationRequest operationRequest,SendParameters sendParameters) { Dictionary<byte,object> dict = new Dictionary<byte,object>();
dict.Add(,"void"); //创建一个新的响应操作,发送给客户端
OperationResponse response = new OperationResponse(,dict);
SendOperationResponse(response,sendParameters);
}
}
}

ChatPeer

服务端:

将Photon3Unity3D.dll放到unity Plugin文件夹中

 using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using ExitGames.Client.Photon; namespace VoidGame { public class ChatClient : MonoBehaviour,IPhotonPeerListener { private PhotonPeer peer;
private bool m_isConnected; void Start() {
peer = new PhotonPeer(this,ConnectionProtocol.Tcp);
peer.Connect("127.0.0.1:4530","ChatServer"); } void Update() {
peer.Service(); } void OnGUI() {
if(m_isConnected) {
if(GUILayout.Button("Send a operation")) {
Dictionary<byte,object> dict = new Dictionary<byte,object>();
dict.Add(,"username");
dict.Add(,"password");
peer.OpCustom(,dict,true); //发送数据到服务端
}
}
} public void DebugReturn(DebugLevel level,string message) {
Debug.Log(level + ":" + message);
} public void OnEvent(EventData eventData) {
} //收到服务端响应,获取数据
public void OnOperationResponse(OperationResponse operationResponse) {
Dictionary<byte,object> dict = operationResponse.Parameters;
object value;
dict.TryGetValue(,out value);
Debug.Log("Get value from server:" + value);
} public void OnStatusChanged(StatusCode statusCode) {
switch(statusCode) {
case StatusCode.Connect:
m_isConnected = true;
Debug.Log("Connected Success");
break;
case StatusCode.Disconnect:
break;
case StatusCode.Exception:
break;
case StatusCode.ExceptionOnConnect:
break;
case StatusCode.SecurityExceptionOnConnect:
break;
case StatusCode.QueueOutgoingReliableWarning:
break;
case StatusCode.QueueOutgoingUnreliableWarning:
break;
case StatusCode.SendError:
break;
case StatusCode.QueueOutgoingAcksWarning:
break;
case StatusCode.QueueIncomingReliableWarning:
break;
case StatusCode.QueueIncomingUnreliableWarning:
break;
case StatusCode.QueueSentWarning:
break;
case StatusCode.InternalReceiveException:
break;
case StatusCode.TimeoutDisconnect:
break;
case StatusCode.DisconnectByServer:
break;
case StatusCode.DisconnectByServerUserLimit:
break;
case StatusCode.DisconnectByServerLogic:
break;
case StatusCode.TcpRouterResponseOk:
break;
case StatusCode.TcpRouterResponseNodeIdUnknown:
break;
case StatusCode.TcpRouterResponseEndpointUnknown:
break;
case StatusCode.TcpRouterResponseNodeNotReady:
break;
case StatusCode.EncryptionEstablished:
break;
case StatusCode.EncryptionFailedToEstablish:
break;
default:
break;
}
}
}
}

ChatClient