/// <summary> /// Called internally by Photon when a peer is attempting to connect. /// Services the connection attempt. /// </summary> /// <param name="initRequest">Request details.</param> /// <returns></returns> protected override PeerBase CreatePeer(InitRequest initRequest) { //Create the details so that the consumer of this class, who extends it, can indicate if this is a request we should service //AKA should a peer be made IConnectionDetails details = new PhotonServerIConnectionDetailsAdapter(initRequest.RemoteIP, initRequest.RemotePort, initRequest.LocalPort); //If we should service the peer if (ShouldServiceIncomingPeerConnect(details)) { //Unlike in PhotonServer we have the expectation that they WILL be creating a peer since they said they would //Because of this we'll be creating the actual PeerBase in advance. NetworkMessagePublisher publisher = new NetworkMessagePublisher(); IDisconnectionServiceHandler disconnectionHandler = new PhotonServerIDisconnectionServiceHandlerAdapter(); //Build the peer first since it's required for the network message sender GladNetClientPeer peerBase = new GladNetClientPeer(initRequest, publisher, Deserializer, disconnectionHandler); //We should make the ClientPeerSession now ClientPeerSession session = CreateClientSession(new PhotonServerINetworkMessageSenderClientAdapter(peerBase, Serializer), details, publisher, disconnectionHandler, routebackService); if (session == null) { peerBase.Disconnect(); return null; } //Add the ID to the AUID map service and setup removal auidMapService.Add(details.ConnectionID, session); disconnectionHandler.DisconnectionEventHandler += () => auidMapService.Remove(details.ConnectionID); //This must be done to keep alive the reference of the session //Otherwise GC will clean it up (WARNING: This will create circular reference and cause a leak if you do not null the peer out eventually) peerBase.GladNetPeer = session; return peerBase; } else { //Disconnect the client if they're not going to have a peer serviced initRequest.PhotonPeer.DisconnectClient(); return null; } }
/// <summary> /// Called internally by Photon when a peer is attempting to connect. /// Services the connection attempt. /// </summary> /// <param name="initRequest">Request details.</param> /// <returns></returns> protected override PeerBase CreatePeer(InitRequest initRequest) { //Create the details so that the consumer of this class, who extends it, can indicate if this is a request we should service //AKA should a peer be made IConnectionDetails details = new PhotonServerIConnectionDetailsAdapter(initRequest.RemoteIP, initRequest.RemotePort, initRequest.LocalPort); //If we should service the peer if (ShouldServiceIncomingPeerConnect(details)) { //Unlike in PhotonServer we have the expectation that they WILL be creating a peer since they said they would //Because of this we'll be creating the actual PeerBase in advance. NetworkMessagePublisher publisher = new NetworkMessagePublisher(); IDisconnectionServiceHandler disconnectionHandler = new PhotonServerIDisconnectionServiceHandlerAdapter(); //Build the peer first since it's required for the network message sender GladNetClientPeer peerBase = new GladNetClientPeer(initRequest, publisher, Deserializer, disconnectionHandler); //We should make the ClientPeerSession now ClientPeerSession session = CreateClientSession(new PhotonServerINetworkMessageSenderClientAdapter(peerBase, Serializer), details, publisher, disconnectionHandler, routebackService); if (session == null) { peerBase.Disconnect(); return(null); } //Add the ID to the AUID map service and setup removal auidMapService.Add(details.ConnectionID, session); disconnectionHandler.DisconnectionEventHandler += () => auidMapService.Remove(details.ConnectionID); //This must be done to keep alive the reference of the session //Otherwise GC will clean it up (WARNING: This will create circular reference and cause a leak if you do not null the peer out eventually) peerBase.GladNetPeer = session; return(peerBase); } else { //Disconnect the client if they're not going to have a peer serviced initRequest.PhotonPeer.DisconnectClient(); return(null); } }
protected override void OnConnectionEstablished(object responseObject) { //We connected so we should publish that fact IConnectionDetails details = new PhotonServerIConnectionDetailsAdapter(this.RemoteIP, this.RemotePort, this.LocalPort); //This is a horrible way to do it but I did not expect this sort of change in Photon 4. GladNetPeer = ((GladNetAppBase)GladNetAppBase.Instance).CreateServerPeer(new PhotonServerINetworkMessageSenderClientAdapter(this, ((GladNetAppBase)GladNetAppBase.Instance).Serializer), details, (INetworkMessageSubscriptionService)networkReciever, disconnectionServiceHandler, ((GladNetAppBase)GladNetAppBase.Instance).routebackService); //If we failed to generate a peer if(GladNetPeer == null) { this.Disconnect(); return; } //Add the ID to the AUID map service and setup removal ((GladNetAppBase)GladNetAppBase.Instance).auidMapService.Add(details.ConnectionID, GladNetPeer); disconnectionServiceHandler.DisconnectionEventHandler += () => ((GladNetAppBase)GladNetAppBase.Instance).auidMapService.Remove(details.ConnectionID); networkReciever.OnNetworkMessageReceive(new PhotonStatusMessageAdapter(NetStatus.Connected), null); }
protected override void OnConnectionEstablished(object responseObject) { //We connected so we should publish that fact IConnectionDetails details = new PhotonServerIConnectionDetailsAdapter(this.RemoteIP, this.RemotePort, this.LocalPort); //This is a horrible way to do it but I did not expect this sort of change in Photon 4. GladNetPeer = ((GladNetAppBase)GladNetAppBase.Instance).CreateServerPeer(new PhotonServerINetworkMessageSenderClientAdapter(this, ((GladNetAppBase)GladNetAppBase.Instance).Serializer), details, (INetworkMessageSubscriptionService)networkReciever, disconnectionServiceHandler, ((GladNetAppBase)GladNetAppBase.Instance).routebackService); //If we failed to generate a peer if (GladNetPeer == null) { this.Disconnect(); return; } //Add the ID to the AUID map service and setup removal ((GladNetAppBase)GladNetAppBase.Instance).auidMapService.Add(details.ConnectionID, GladNetPeer); disconnectionServiceHandler.DisconnectionEventHandler += () => ((GladNetAppBase)GladNetAppBase.Instance).auidMapService.Remove(details.ConnectionID); networkReciever.OnNetworkMessageReceive(new PhotonStatusMessageAdapter(NetStatus.Connected), null); }