Beispiel #1
0
        /// <summary>
        ///     btk packet
        /// </summary>
        /// <param name="btkPacket"></param>
        public void FriendTalk(BtkPacket btkPacket)
        {
            string message = btkPacket.Message;

            if (message.Length > 60)
            {
                message = message.Substring(0, 60);
            }

            message = message.Trim();
            var receiverSession = ServerManager.Instance.Sessions.Values.FirstOrDefault(s => s.Character.CharacterId == btkPacket.CharacterId);

            if (receiverSession != null)
            {
                receiverSession.SendPacket(Session.Character.GenerateTalk(message));
                return;
            }

            ConnectedAccount receiver = null;

            List <WorldServerInfo> servers = WebApiAccess.Instance.Get <List <WorldServerInfo> >("api/channels");

            foreach (var server in servers)
            {
                var accounts = WebApiAccess.Instance
                               .Get <List <ConnectedAccount> >($"api/connectedAccount", server.WebApi);

                if (accounts.Any(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId))
                {
                    receiver = accounts.First(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId);
                }
            }

            if (receiver == null)
            {
                Session.SendPacket(new InfoPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_OFFLINE, Session.Account.Language)
                });
                return;
            }

            ServerManager.Instance.BroadcastPacket(new PostedPacket
            {
                Packet            = PacketFactory.Serialize(Session.Character.GenerateTalk(message)),
                ReceiverCharacter = new Data.WebApi.Character()
                {
                    Id = btkPacket.CharacterId, Name = receiver.Name
                },
                SenderCharacter = new Data.WebApi.Character()
                {
                    Name = Session.Character.Name, Id = Session.Character.CharacterId
                },
                OriginWorldId = MasterClientListSingleton.Instance.ChannelId,
                ReceiverType  = ReceiverType.OnlySomeone
            }, receiver.ChannelId);
        }
Beispiel #2
0
        /// <summary>
        ///     btk packet
        /// </summary>
        /// <param name="btkPacket"></param>
        public void FriendTalk(BtkPacket btkPacket)
        {
            if (!Session.Character.CharacterRelations.Values.Any(s =>
                                                                 s.RelatedCharacterId == btkPacket.CharacterId && s.RelationType != CharacterRelationType.Blocked))
            {
                _logger.Error(Language.Instance.GetMessageFromKey(LanguageKey.USER_IS_NOT_A_FRIEND,
                                                                  Session.Account.Language));
                return;
            }

            var message = btkPacket.Message;

            if (message.Length > 60)
            {
                message = message.Substring(0, 60);
            }

            message = message.Trim();
            var receiverSession =
                Broadcaster.Instance.GetCharacter(s =>
                                                  s.VisualId == btkPacket.CharacterId);

            if (receiverSession != null)
            {
                receiverSession.SendPacket(Session.Character.GenerateTalk(message));
                return;
            }

            ConnectedAccount receiver = null;

            var servers = WebApiAccess.Instance.Get <List <WorldServerInfo> >("api/channels");

            foreach (var server in servers)
            {
                var accounts = WebApiAccess.Instance
                               .Get <List <ConnectedAccount> >("api/connectedAccount", server.WebApi);

                if (accounts.Any(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId))
                {
                    receiver = accounts.First(a => a.ConnectedCharacter?.Id == btkPacket.CharacterId);
                }
            }

            if (receiver == null)
            {
                Session.SendPacket(new InfoPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.FRIEND_OFFLINE, Session.Account.Language)
                });
                return;
            }

            WebApiAccess.Instance.BroadcastPacket(new PostedPacket
            {
                Packet            = PacketFactory.Serialize(new[] { Session.Character.GenerateTalk(message) }),
                ReceiverCharacter = new Character
                {
                    Id = btkPacket.CharacterId, Name = receiver.ConnectedCharacter?.Name
                },
                SenderCharacter = new Character
                {
                    Name = Session.Character.Name, Id = Session.Character.CharacterId
                },
                OriginWorldId = MasterClientListSingleton.Instance.ChannelId,
                ReceiverType  = ReceiverType.OnlySomeone
            }, receiver.ChannelId);
        }