photon server deep dive - view from implmentation of photonwire, multiplayer framework for unity

Post on 14-Apr-2017

1.084 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Work

Unity

Private

https://medium.com/@neuecc http://neue.cc/

@neuecc

https://github.com/neuecc/UniRx

Mobile JRPGhttps://kuro-kishi.jp

Unity

ASP.NET

Photon

Main feature on Game

Chat and Notification

Support C#!

Can be able to write logic in server

Have many cases in Unity

PUN(Photon Unity Network)

We don’t use PUN,

use Client SDK(with Own Framework)

Getting Started

Photon Server

It is class library

Execution flow

public class Startup : ApplicationBase{

// create connection when connected on serverprotected override PeerBase CreatePeer(InitRequest initRequest){

if (/* from client request */){

return new MyClientPeer(initRequest);}else // from server request{

return new InboundS2SPeer(initRequest);}

}

protected override void Setup(){

// Launching process// Connect to master servervar outboundPeer = new OutboundS2SPeer();outboundPeer.ConnectTcp();

}

protected override void TearDown(){

// Quitting process}

}

public class MyClientPeer : ClientPeer{

public MyClientPeer(InitRequest initRequest): base(initRequest)

{

}

protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters{

// byte: operationRequest.OperationCode// Dictionary<byte, object>: operationRequest.Parameters

// Send response to clientthis.SendOperationResponse(new OperationResponse(), sendParameters);

}

protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail){}

}

// 1. from Unity to Servervar peer = new ClientSidePeer(new MyListener());peer.OpCustom(opCode: 10, parameter: new Dictionary<byte, object>());

// 2. Receive on Serverprotected override void OnOperationRequest(OperationRequest operationRequest){

// switch by opCodeswitch (operationRequest.OperationCode){

case 10:// Parameter from dictionary(<byte, object>)var parameter = operationRequest.Parameters;

/* process request */

// 3. Send result to clientthis.SendOperationResponse(new OperationResponse(operationCode: 5));break;

default:break;

}}

// Unity Clientpublic class MyListener : IPhotonPeerListener{

// 4. Received from Serverpublic void OnOperationResponse(OperationResponse operationResponse){

// Return responseswitch (operationResponse.OperationCode){

case 5:// process responsebreak;

}}

}

// 3. Server: Send result to clientthis.SendOperationResponse(new OperationResponse(operationCode: 5), sendParameters);

// switch by opCodeswitch (operationRequest.OperationCode){

case 0:break;

case 1:break;

case 2:break;

case 3:break;

case 4:break;

case 5:break;

case 6:break;

case 7:break;

case 8:break;

case 9:break

case 10:break;

// switch by opCodeswitch (operationRequest.OperationCode){

case 0:break;

case 1:break;

case 2:break;

case 3:break;

case 4:break;

case 5:break;

// switch by opCodeswitch (operationRequest.OperationCode){

case 0:break;

case 1:break;

case 2:break;

case 3:break;

case 4:

Intro to PhotonWire

send byte, Dictionary and switch and switch

Can not track send-receive message

Typed Asynchronous RPC Layerhttps://github.com/neuecc/PhotonWire

Windows Client

Server to Server

Next PhotonWire

DESERIALIZE SPEED

Replacing serializer

(De)serialize is slow in Unity

ScriptableObject > JsonUtility > *** > MsgPack > XxxJSON

New WireFormat which does not Deserialize

Fit to C# and Unity

Will be available soon

top related