diff --git a/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs b/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs index c82ed83..fc42170 100644 --- a/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs +++ b/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs @@ -50,9 +50,9 @@ namespace DiIiS_NA.LoginServer.Battle public Dictionary Services { get; private set; } public ISocketChannel SocketConnection { get; private set; } public IChannelHandlerContext Connect { get; private set; } - public bool AuthentificationStatus = false; + public bool AuthenticationStatus = false; public ClientLocale ClientLanguage = ClientLocale.enUS; - public IRpcController listenercontroller; + public IRpcController ListenerController; private uint _tokenCounter = 0; public static bgs.protocol.NO_RESPONSE NO_RESPONSE = bgs.protocol.NO_RESPONSE.CreateBuilder().Build(); private Dictionary pendingResponses = new Dictionary(); @@ -160,12 +160,12 @@ namespace DiIiS_NA.LoginServer.Battle Services = new Dictionary(); MappedObjects = new ConcurrentDictionary(); this.MOTDSent = false; - if (SocketConnection.Active) - Logger.Trace("Клиент - {0} - успешно зашифровал соединение ", socketChannel.RemoteAddress); + Logger.Trace("Client - {0} - successfully encrypted the connection", socketChannel.RemoteAddress); } - protected override void ChannelRead0(IChannelHandlerContext ctx, BNetPacket msg) - { + + protected override void ChannelRead0(IChannelHandlerContext ctx, BNetPacket msg) + { Connect = ctx; Header header = msg.GetHeader(); byte[] payload = (byte[])msg.GetPayload(); @@ -184,112 +184,123 @@ namespace DiIiS_NA.LoginServer.Battle pendingResponses.Remove((int)header.Token); } else - Logger.Debug(String.Format("Incoming Response: Unable to identify service (id: %d, hash: 0x%04X)", header.ServiceId, header.ServiceHash)); + Logger.Debug( + $"Incoming Response: Unable to identify service (id: {header.ServiceId}, hash: 0x{header.ServiceHash:04X})"); } } else { - var service = Service.GetByID(Service.GetByHash(header.ServiceHash)); - if(header.ServiceHash != 2119327385) - if (service != null) - { - #region Все хэши сервисов - /* - AccountService - 1658456209 - AccountNotify - 1423956503 - AuthenticationClient - 1898188341 - AuthenticationServer - 233634817 - ChallengeNotify - 3151632159 - ChannelService - 3073563442 - ChannelSubscriber - 3213656212 - ChannelVoiceService - 2559626750 - ClubMembershipListener - 724851067 - ClubMembershipService - 2495170438 - Нужен - ConnectionService - 1698982289 - DiagService - 3111080599 - FriendsService - 2749215165 - FriendsNotify - 1864735251 - PresenceListener - 2299181151 - PresenceService - 4194801407 - ReportService - 2091868617 - Resources - 3971904954 - SessionListener - 2145610546 - SessionService - 510168069 - SocialNetworkService - 1910276758 - SocialNetworkListener - 3506428651 - UserManagerService - 1041835658 - UserManagerNotify - 3162975266 - WhisperListener - 1072006302 - WhisperService - 3240634617 - ChannelMembershipService - 2119327385 - ChannelMembershipListener - 25167806 - ChannelService_v2 - 2039298513 - ChannelListener_v2 - 451225222 - ReportService_v2 - 977410299 - VoiceService_v2 - 4117798472 - - AccountService - 0x62DA0891 - AccountNotify - 0x54DFDA17 - AuthenticationClient - 0x71240E35 - AuthenticationServer - 0x0DECFC01 - ChallengeNotify - 0xBBDA171F - ChannelService - 0xB732DB32 - ChannelSubscriber - 0xBF8C8094 - ChannelVoiceService - 0x9890CDFE - ClubMembershipListener - 0x2B34597B - ClubMembershipService - 0x94B94786 - ConnectionService - 0x65446991 - DiagService - 0xB96F5297 - FriendsService - 0xA3DDB1BD - FriendsNotify - 0x6F259A13 - PresenceListener - 0x890AB85F - PresenceService - 0xFA0796FF - ReportService - 0x7CAF61C9 - Resources - ECBE75BA - SessionListener - 0x7FE36B32 - SessionService - 0x1E688C05 - SocialNetworkService - 0x71DC8296 - SocialNetworkListener - 0xD0FFDAEB - UserManagerService - 0x3E19268A - UserManagerNotify - 0xBC872C22 - WhisperListener - 0x3FE5849E - WhisperService - 0xC12828F9 - ChannelMembershipService - 0x7E525E99 - ChannelMembershipListener - 0x018007BE - ChannelService_v2 - 0x798D39D1 - ChannelListener_v2 - 0x1AE52686 - ReportService_v2 - 0x3A4218FB - VoiceService_v2 - 0xF5709E48 - */ - #endregion - MethodDescriptor method = service.DescriptorForType.Methods.Single(m => GetMethodId(m) == header.MethodId); - IMessage proto = service.GetRequestPrototype(method); - IBuilder builder = proto.WeakCreateBuilderForType(); - IMessage message = builder.WeakMergeFrom(ByteString.CopyFrom(payload)).WeakBuild(); - try + var service = Service.GetByID(Service.GetByHash(header.ServiceHash)); + if (header.ServiceHash != 2119327385) + if (service != null) { - lock (service) + #region All service hashes + + /* + AccountService - 1658456209 + AccountNotify - 1423956503 + AuthenticationClient - 1898188341 + AuthenticationServer - 233634817 + ChallengeNotify - 3151632159 + ChannelService - 3073563442 + ChannelSubscriber - 3213656212 + ChannelVoiceService - 2559626750 + ClubMembershipListener - 724851067 + ClubMembershipService - 2495170438 - Нужен + ConnectionService - 1698982289 + DiagService - 3111080599 + FriendsService - 2749215165 + FriendsNotify - 1864735251 + PresenceListener - 2299181151 + PresenceService - 4194801407 + ReportService - 2091868617 + Resources - 3971904954 + SessionListener - 2145610546 + SessionService - 510168069 + SocialNetworkService - 1910276758 + SocialNetworkListener - 3506428651 + UserManagerService - 1041835658 + UserManagerNotify - 3162975266 + WhisperListener - 1072006302 + WhisperService - 3240634617 + ChannelMembershipService - 2119327385 + ChannelMembershipListener - 25167806 + ChannelService_v2 - 2039298513 + ChannelListener_v2 - 451225222 + ReportService_v2 - 977410299 + VoiceService_v2 - 4117798472 + + AccountService - 0x62DA0891 + AccountNotify - 0x54DFDA17 + AuthenticationClient - 0x71240E35 + AuthenticationServer - 0x0DECFC01 + ChallengeNotify - 0xBBDA171F + ChannelService - 0xB732DB32 + ChannelSubscriber - 0xBF8C8094 + ChannelVoiceService - 0x9890CDFE + ClubMembershipListener - 0x2B34597B + ClubMembershipService - 0x94B94786 + ConnectionService - 0x65446991 + DiagService - 0xB96F5297 + FriendsService - 0xA3DDB1BD + FriendsNotify - 0x6F259A13 + PresenceListener - 0x890AB85F + PresenceService - 0xFA0796FF + ReportService - 0x7CAF61C9 + Resources - ECBE75BA + SessionListener - 0x7FE36B32 + SessionService - 0x1E688C05 + SocialNetworkService - 0x71DC8296 + SocialNetworkListener - 0xD0FFDAEB + UserManagerService - 0x3E19268A + UserManagerNotify - 0xBC872C22 + WhisperListener - 0x3FE5849E + WhisperService - 0xC12828F9 + ChannelMembershipService - 0x7E525E99 + ChannelMembershipListener - 0x018007BE + ChannelService_v2 - 0x798D39D1 + ChannelListener_v2 - 0x1AE52686 + ReportService_v2 - 0x3A4218FB + VoiceService_v2 - 0xF5709E48 + */ + + #endregion + + MethodDescriptor method = + service.DescriptorForType.Methods.Single(m => GetMethodId(m) == header.MethodId); + IMessage proto = service.GetRequestPrototype(method); + IBuilder builder = proto.WeakCreateBuilderForType(); + IMessage message = builder.WeakMergeFrom(ByteString.CopyFrom(payload)).WeakBuild(); + try { - var controller = new HandlerController(); - controller.Client = this; - controller.LastCallHeader = header; - controller.Status = 0; - controller.ListenerId = 0; + lock (service) + { + HandlerController controller = new() + { + Client = this, + LastCallHeader = header, + Status = 0, + ListenerId = 0 + }; #if DEBUG - Logger.Warn("Вызов: {0}, Хэш сервиса: {1}, Метод: {2}, ID: {3}", service.GetType().Name, header.ServiceHash, method.Name, header.MethodId); + Logger.Warn("Call: {0}, Service hash: {1}, Method: {2}, ID: {3}", + service.GetType().Name, header.ServiceHash, method.Name, header.MethodId); #endif - service.CallMethod(method, controller, message, (IMessage m) => { sendResponse(ctx, (int)header.Token, m, controller.Status); }); + service.CallMethod(method, controller, message, + (IMessage m) => { sendResponse(ctx, (int)header.Token, m, controller.Status); }); + } + } + catch (NotImplementedException) + { + Logger.Warn("Unimplemented service method: {0}.{1}", service.GetType().Name, method.Name); } } - catch (NotImplementedException) + else { - Logger.Warn("Неимплементированный метод сервиса: {0}.{1}", service.GetType().Name, method.Name); + Logger.Warn( + $"Client is calling unconnected service (id: {header.ServiceId}, hash: {header.ServiceHash} Method id: {header.MethodId})"); } - } - else - Logger.Warn(String.Format("Клиент обращается к неподключенному сервису(id: {0}, hash: {1} Method id: {2})", header.ServiceId, header.ServiceHash, header.MethodId)); - } }