// This list keeps track of all P2P class instancesList<P2P> peers =newList<P2P>();// This event callback receives all matched clients' addressesmatchmaker.OnP2PAddressSync+= (string[] addresses) =>{for (int i =0; i <addresses.Length; i++) {string address =addresses[i];Diarkis.Modules.P2P peerClient =newDiarkis.Modules.P2P();peerClient.OnReady+= OnP2PReady;peerClient.OnFail+= OnP2PFail;peerClient.Connect(address);lock(peers) {peers.Add(peerClient); } }};privatevoidOnP2PReady(string peerAddress,int peerPort,double holePunchTimeInMilliseconds){ // P2P is now ready!}privatevoidOnP2PFail(string peerAddress,int peerPort){ // P2P has failed...}// For Unity Game Engine...voidUpdate(){ // We must call Update of each P2P class instanceslock(peers) {for (int i =0; i <peers.Count; i++) {peers[i].Update(); } }}// Calling this triggers OnP2PAddressSync event on all matched user clientsmatchmaker.P2PAddressSync();