/// <summary>
        /// Create a packet who contains data about the player
        /// </summary>
        /// <param name="playerEntity"></param>
        /// <param name="owned"></param>
        /// <returns></returns>
        private NetDataWriter CreatePlayerDataPacket(Entity playerEntity, NetPeer peer)
        {
            var em         = MainWorld.GetOrCreateManager <EntityManager>();
            var peerLink   = em.GetSharedComponentData <PlayerPeerLink>(playerEntity);
            var userLink   = em.GetSharedComponentData <PlayerUserLink>(playerEntity);
            var masterLink = em.GetSharedComponentData <MasterServerPlayerId>(playerEntity);

            var msgManager = NetInstance.GetMessageManager();
            var dataWriter = msgManager.Create(m_MsgUpdatePlayer);

            // The index is used to determin the id of the entity in the server
            dataWriter.Put(StMath.DoubleIntToLong(playerEntity.Index, playerEntity.Version));
            dataWriter.Put(userLink.Target.Index);
            dataWriter.Put(masterLink.Id);
            dataWriter.Put(peerLink.Target == peer);

            return(dataWriter);
        }
        void EventConnectionRequest.IEv.Callback(EventConnectionRequest.Arguments args)
        {
            var caller  = args.Caller;
            var request = args.Request;

            if (caller != NetInstance || !NetInstance.SelfHost)
            {
                return;
            }

            // TODO: This is only temporary, this should be moved to somewhere else
            var playerId = request.Data.GetIdent128();

            var em     = MainWorld.GetOrCreateManager <EntityManager>();
            var plBank = MainWorld.GetOrCreateManager <GamePlayerBank>();
            var player = plBank.GetPlayerFromIdent(playerId);

            if (!player.IsCreated)
            {
                player = new GamePlayer(em.CreateEntity());
                var masterServerPlayerId = new MasterServerPlayerId()
                {
                    Id = playerId
                };

                em.SetOrAddSharedComponentData(player.WorldPointer, masterServerPlayerId);
                plBank.AddPlayer(masterServerPlayerId, player);
            }
            else
            {
                var masterServerPlayerId = new MasterServerPlayerId()
                {
                    Id = playerId
                };

                em.SetOrAddSharedComponentData(player.WorldPointer, masterServerPlayerId);
            }

            m_ConnectionPlayerBank.RegisterPlayer(StMath.DoubleIntToLong(player.WorldPointer.Index, player.WorldPointer.Version), player);

            var peer = request.Accept();

            em.SetOrAddSharedComponentData(player.WorldPointer, new PlayerPeerLink(caller.PeerInstance, peer));
        }
示例#3
0
        public void Down_ThreadFun(object par)
        {
            string[] pars     = par as string[];
            string   url      = pars[0];
            string   savePath = pars[1];
            string   fileName = pars[2];
            string   type     = pars[3];

            DateTime start = DateTime.Now;

            long v = -1;

            long.TryParse(this.textBox21.Text.Trim(), out v);
            this.textBox21.Text = v.ToString();

            bool   re       = new DownLoadHelper().DownLoadFile(url, savePath, fileName, v);
            string filepath = savePath + "\\" + fileName;

            double size = StMath.ToPrecision(StFile.GetFileSize(filepath) * 1.0 / 1000000, 2);
            double t    = StMath.ToPrecision((DateTime.Now - start).TotalSeconds, 2);

            this.label18.Text = "上次下载" + type + "( " + fileName + " ) " + size + "M 共耗时 " + t + " 秒,平均 " + StMath.ToPrecision(size / t, 2) + "M/s ";
        }
        void EventReceiveData.IEv.Callback(EventReceiveData.Arguments args)
        {
            var caller       = args.Caller;
            var peerInstance = args.PeerInstance;
            var reader       = args.Reader;

            if (caller != NetInstance || reader.Type != MessageType.Pattern)
            {
                return;
            }

            var peerPatternMgr = peerInstance.GetPatternManager();
            var msg            = peerPatternMgr.GetPattern(reader);

            var peerNetId     = peerInstance.Global.Id;
            var conPlayerBank = peerInstance.Get <ConnectionPlayerBank>();
            var plBank        = MainWorld.GetOrCreateManager <GamePlayerBank>();
            var em            = MainWorld.GetOrCreateManager <EntityManager>();

            if (msg == m_MsgUpdatePlayer)
            {
                var playerId  = reader.Data.GetEntity();
                var userIndex = reader.Data.GetULong();
                var masterId  = reader.Data.GetIdent128();
                var owned     = reader.Data.GetBool();

                Debug.Log($"Update player ({playerId.Index}) {userIndex} {masterId}.");

                var player = plBank.GetPlayerFromIdent(masterId);
                if (!player.IsCreated)
                {
                    player = new GamePlayer(em.CreateEntity());
                    var masterServerPlayerId = new MasterServerPlayerId()
                    {
                        Id = masterId
                    };

                    player.WorldPointer.SetOrAddSharedComponentData(masterServerPlayerId, MainWorld);
                    plBank.AddPlayer(masterServerPlayerId, player);
                }
                else
                {
                    var masterServerPlayerId = new MasterServerPlayerId()
                    {
                        Id = masterId
                    };
                    player.WorldPointer.SetOrAddSharedComponentData(masterServerPlayerId, MainWorld);
                }

                conPlayerBank.RegisterPlayer(StMath.DoubleIntToLong(playerId.Index, playerId.Version), player);

                player.WorldPointer.SetOrAddSharedComponentData
                (
                    new PlayerPeerLink(caller.PeerInstance, peerInstance.Peer),
                    MainWorld
                );
                player.WorldPointer.SetOrAddSharedComponentData
                (
                    new PlayerUserLink(peerInstance.Id, peerNetId, userIndex),
                    MainWorld
                );
                player.WorldPointer.SetOrAddComponentData(new ConnectedPlayerEntity(), MainWorld);
            }
            else if (msg == m_MsgRemovePlayer)
            {
                var playerId = reader.Data.GetInt();
                var player   = m_ConnectionPlayerBank.Get(playerId);
                if (player.IsCreated)
                {
                    em.RemoveComponent <PlayerPeerLink>(player.WorldPointer);
                    em.RemoveComponent <PlayerUserLink>(player.WorldPointer);
                    em.RemoveComponent <ConnectedPlayerEntity>(player.WorldPointer);

                    conPlayerBank.UnregisterPlayer(playerId);

                    Debug.Log("player disconnected!");
                }
                else
                {
                    Debug.LogError("Data incoherence (player.IsCreated == false)");
                }
            }
        }