Example #1
0
        public override void DoHandle(INetworkChannel channel, PlayerEntity entity,
                                      EClient2ServerMessage eClient2ServerMessage,
                                      PingRequestMessage messageBody)
        {
            var serverStatus = _contexts.session.serverSessionObjects.FpsSatatus;
            var request      = messageBody;
            var resp         = Protobuf.PingMessage.Allocate();

            resp.Id                 = request.Id;
            resp.Type               = request.Type;
            resp.Time               = request.Time;
            resp.AvgDelta           = (int)(serverStatus.AvgDelta);
            resp.MaxDelta           = (int)(serverStatus.MaxDelta);
            resp.CmdLose            = 100;
            resp.CmdTotal           = 100;
            resp.Fps5               = serverStatus.Fps5;
            resp.Fps30              = serverStatus.Fps30;
            resp.Fps60              = serverStatus.Fps60;
            resp.GcCount            = System.GC.CollectionCount(0);
            resp.GcStatus           = SingletonManager.Get <gc_manager>().d_gc_disabled;
            resp.AllocatedMb        = (int)SingletonManager.Get <gc_manager>().allocated_mb;
            resp.AllocationRateMbps = (int)SingletonManager.Get <gc_manager>().average_allocation_rate_mbps;
            if (request.Type)
            {
                channel.SendReliable((int)EServer2ClientMessage.Ping, resp);
            }
            else
            {
                channel.SendRealTime((int)EServer2ClientMessage.Ping, resp);
            }

            resp.ReleaseReference();
        }
Example #2
0
        public void AsyncLoginPlayer(INetworkChannel channel, int messageType, object playerInfoObj)
        {
            IPlayerInfo playerInfo = (IPlayerInfo)playerInfoObj;

            logger.InfoFormat("Received LocalLogin Message ... playerName:{0}", playerInfo.PlayerName);

            if (channelToPlayer.Count == 0 && ContextsWrapper.contexts.player.count == 0)
            {
                ResetContexts(false);
                logger.InfoFormat("Reset All Entity Finish ...");
            }

            if (!channelToPlayer.ContainsKey(channel))
            {
                UpdateTestPlayerInfo(playerInfo);
                // 大厅传入错误RoleModelId
                if (null == SingletonManager.Get <RoleConfigManager>().GetRoleItemById(playerInfo.RoleModelId))
                {
                    logger.Error("RoleModelIdError:  " + playerInfo.RoleModelId);
                    playerInfo.RoleModelId = 2;
                }

                var player = CreateNewPlayerEntity(playerInfo);
                playerInfo.PlayerEntity = player;
                player.ReplaceNetwork(channel);

                playerInfo.StatisticsData = player.statisticsData.Statistics;
                if (ContextsWrapper.FreeArgs.Rule.GameStartTime > 0)
                {
                    playerInfo.StatisticsData.GameJoinTime =
                        ContextsWrapper.FreeArgs.Rule.ServerTime;
                }

                channelToPlayer[channel] = player;
                channel.MessageReceived += ChannelOnMessageReceived;
                channel.Disconnected    += ChannelOnDisonnected;


                if (!player.hasUpdateMessagePool)
                {
                    player.AddUpdateMessagePool();
                }
                player.updateMessagePool.LastestExecuteUserCmdSeq = -1;

                playerInfo.InitPosition = player.position.Value;

                NoticeHallPlayerLoginSucc(player);
                player.ReplaceStage(EPlayerLoginStage.CreateEntity);
                var msg = PlayerInfoMessage.Allocate();
                msg.ConvertFrom(playerInfo);
                channel.SendReliable((int)EServer2ClientMessage.PlayerInfo, msg);
                logger.InfoFormat("player login with name {0}, key {1}, game rule {2}, msp id {3}",
                                  playerInfo.PlayerName, player.entityKey, 0, 0);
                msg.ReleaseReference();
            }
            else
            {
                logger.ErrorFormat("player duplicate login from name:{0}, channe:{1}", playerInfo.PlayerName, channel);
            }
        }
Example #3
0
        public void Send(INetworkChannel channel, bool logmsg, string messageName, params IMessage[] messageBodys)
        {
            var apc = Apc.Allocate();

            apc.FunctionName = messageName;

            foreach (var msg in messageBodys)
            {
                if (null == msg)
                {
                    continue;
                }
                MemoryStream stream = new MemoryStream();
                _serializer.Serialize(stream, msg);
                ByteString byteString = ByteString.CopyFrom(stream.ToArray());
                apc.Parameters.Add(byteString);
            }

            channel.SendReliable(messageName.GetHashCode(), apc);

            if (logmsg)
            {
                _logger.InfoFormat("Send Rpc Message {0} hascode {1} ref count {2}", messageName, messageName.GetHashCode(), apc.RefCount);
            }

            apc.ReleaseReference();
        }
Example #4
0
        private void TcpMsg(INetworkChannel channel)
        {
            var ping = PingRequestMessage.Allocate();

            ping.Id   = _seq;
            ping.Type = true;
            ping.Time = DateTime.UtcNow.ToMillisecondsSinceEpoch();
            ;
            channel.SendReliable((int)EClient2ServerMessage.Ping, ping);
        }
Example #5
0
        private void ServerOnChannelConnected(INetworkChannel networkChannel)
        {
            networkChannel.Serializer       = _defaultSerializer;
            networkChannel.MessageReceived += NetworkChannelOnMessageReceived;
            var msg = UdpIdMessage.Allocate();

            msg.Id            = networkChannel.LocalConnId;
            msg.Port          = SingletonManager.Get <ServerFileSystemConfigManager>().BootConfig.BattleServer.UdpPort;
            msg.ServerAsset   = Version.Instance.LocalAsset;
            msg.ServerVersion = Version.Instance.LocalVersion;
            msg.ServerId      = SingletonManager.Get <ServerFileSystemConfigManager>().BootConfig.Id;
            networkChannel.SendReliable((int)EServer2ClientMessage.UdpId, msg);
            msg.ReleaseReference();
        }
Example #6
0
        public bool SendLoginSucc(IPlayerInfo playerInfo, INetworkChannel channel)
        {
            switch (state)
            {
            case RoomState.Initialized:
            case RoomState.Running:
                var sessionObjects = ContextsWrapper.contexts.session.serverSessionObjects;
                var msg            = LoginSuccMessage.Allocate();
                msg.GameRule = sessionObjects.GameRule;
                ContextsWrapper.RoomInfo.ToLoginSuccMsg(msg);
                msg.Camp = playerInfo.Camp;
                //FreeArgs.Trigger(FreeTriggerConstant.PRELOADRESOURCE, new TempUnit("roomInfo", new ObjectUnit(msg)), new TempUnit("playerInfo", new ObjectUnit(playerInfo)));
                channel.SendReliable((int)EServer2ClientMessage.SceneInfo, msg);
                if (RoomState.Running == state)
                {
                    channel.SendReliable((int)EServer2ClientMessage.LoginSucc, msg);
                }
                msg.ReleaseReference();
                logger.InfoFormat("player SendLoginSucc with name {0}", playerInfo.PlayerName);
                break;
            }

            return(true);
        }
 private void SendMismatch(int cmdSeq, BulletInfoPair pair, INetworkChannel networkChannel)
 {
     if (!pair.Matched.HasValue)
     {
         if (null != pair.Client && null != pair.Server)
         {
             pair.Matched = pair.Client.IsMatched(pair.Server);
             if (!pair.Matched.Value)
             {
                 var msg = FireInfoAckMessage.Allocate();
                 msg.Seq = cmdSeq;
                 networkChannel.SendReliable((int)EServer2ClientMessage.FireInfoAck, msg);
                 msg.ReleaseReference();
             }
         }
     }
 }
Example #8
0
        public bool SendLoginSucc(IPlayerInfo playerInfo, INetworkChannel channel)
        {
            if (_state == RoomState.Running)
            {
                var sessionObjects = _contexts.session.serverSessionObjects;
                var msg            = LoginSuccMessage.Allocate();
                msg.GameRule = (int)sessionObjects.GameRule;
                _contexts.session.commonSession.RoomInfo.ToLoginSuccMsg(msg);
                msg.Camp = playerInfo.Camp;
                FreeArgs.Trigger(FreeTriggerConstant.PRELOAD_RESOURCE, new TempUnit("roomInfo", new ObjectUnit(msg)), new TempUnit("playerInfo", new ObjectUnit(playerInfo)));

                channel.SendReliable((int)EServer2ClientMessage.LoginSucc, msg);
                msg.ReleaseReference();
                _logger.InfoFormat("player SendLoginSucc with name {0}",
                                   playerInfo.PlayerName);
            }

            return(true);
        }
Example #9
0
        public void Send(INetworkChannel channel, string messageName, params IMessage[] messageBodys)
        {
            var apc = Apc.Allocate();

            apc.FunctionName = messageName;

            foreach (var msg in messageBodys)
            {
                if (null == msg)
                {
                    continue;
                }
                MemoryStream stream = new MemoryStream();
                _serializer.Serialize(stream, msg);
                ByteString byteString = ByteString.CopyFrom(stream.ToArray());
                apc.Parameters.Add(byteString);
            }

            channel.SendReliable(messageName.GetHashCode(), apc);
            apc.ReleaseReference();
        }
        public void AddBulletData(int seq, Vector3 startPoint, Vector3 emitPoint, Vector3 startDir, Vector3 hitPoint, int hitType, INetworkChannel networkChannel)
        {
            _total += 1;
            var msg = FireInfoMessage.Allocate();

            msg.Seq        = seq;
            msg.StartPoint = Vector3Converter.UnityToProtobufVector3(startPoint);
            msg.StartDir   = Vector3Converter.UnityToProtobufVector3(startDir);
            msg.EmitPoint  = Vector3Converter.UnityToProtobufVector3(emitPoint);
            msg.HitPoint   = Vector3Converter.UnityToProtobufVector3(hitPoint);
            msg.HitType    = hitType;
            if (null != _networkChannel)
            {
                _networkChannel.SendReliable((int)EClient2ServerMessage.FireInfo, msg);
            }
            else
            {
                Logger.Error("NetworkChannel is null");
            }
            msg.ReleaseReference();
        }
Example #11
0
        public static void CollectBulletInfoC(BulletEntity entity, INetworkChannel networkChannel)
        {
            if (networkChannel == null)
            {
                return;
            }
            var cmd     = entity.bulletData.CmdSeq;
            var start   = entity.bulletData.StartPoint;
            var emit    = entity.bulletData.EmitPoint;
            var dir     = entity.bulletData.StartDir;
            var hit     = entity.bulletData.HitPoint;
            var hitType = entity.bulletData.HitType;
            var msg     = FireInfoMessage.Allocate();

            msg.Seq        = cmd;
            msg.StartPoint = Vector3Converter.UnityToProtobufVector3(start);
            msg.EmitPoint  = Vector3Converter.UnityToProtobufVector3(emit);
            msg.StartDir   = Vector3Converter.UnityToProtobufVector3(dir);
            msg.HitPoint   = Vector3Converter.UnityToProtobufVector3(hit);
            msg.HitType    = (int)hitType;
            networkChannel.SendReliable((int)EClient2ServerMessage.FireInfo, msg);
            msg.ReleaseReference();
        }
Example #12
0
 private void Send(INetworkChannel channel, SimulationTimeMessage messageBody)
 {
     channel.SendReliable((int)EServer2ClientMessage.SimulationTimeSync, messageBody);
 }