コード例 #1
0
		/// <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;
			}
		}
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
		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);
		}
コード例 #4
0
        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);
        }