protected override void Encode(IChannelHandlerContext context, IObject message, IByteBuffer output) { if (message == null) { return; } var messageId = ClientSettings.ClientSession.GenerateMessageId(); var isRequest = message is IRequest; var sequenceNumber = ClientSettings.ClientSession.GenerateSequenceNumber(isRequest); SessionWriter.Save(ClientSettings.ClientSession); var messageBuffer = Serializer.Serialize(message); try { MtProtoHelper.ToServerEncrypt(messageBuffer, ClientSettings.ClientSession, messageId, sequenceNumber, output); } finally { messageBuffer.Release(); } Log.Debug($"#{ClientSettings.ClientSession.SessionId}: Send secure message {message} with messageId = {messageId} and sequenceNumber = {sequenceNumber}"); if (isRequest) { RequestService.AttachRequestToMessageId(message.Is <IRequest>(), messageId); } }
public SessionLifecycleHandlerBuilder ConfigureSessionWriter(RawSession session) { SessionWriter .Setup(w => w.WriteSession(session, IdleExpirationTime)) .Returns(Task.CompletedTask); return(this); }
private async Task OnUserAuthenticated(TUser user) { var session = ClientSettings.ClientSession; session.UserId = user.Id; await SessionWriter.Save(session).ConfigureAwait(false); }
/// <inheritdoc /> public async Task Logout(CancellationToken cancellationToken) { if (ClientSettings.ClientSession.UserId.HasValue) { await ContextGetter.Context.WriteAndFlushAsync(new RequestLogOut()); RequestService.ReturnException(new UserLogoutException()); ClientSettings.ClientSession.UserId = null; await SessionWriter.Save(ClientSettings.ClientSession); } }
protected override void ChannelRead0(IChannelHandlerContext ctx, TBadServerSalt msg) { Log.Info($"#{ClientSettings.ClientSession.SessionId}: Bad server sault detected! message id = {msg.BadMsgId} "); ClientSettings.ClientSession.ServerSalt = BitConverter.GetBytes(msg.NewServerSalt); var request = RequestService.GetRequestToReply(msg.BadMsgId); var saveTask = SessionWriter.Save(ClientSettings.ClientSession); if (request != null) { saveTask.ContinueWith(_ => ctx.WriteAndFlushAsync(request)); } }
public void EmptyDB_WriteAll() { sut = new SessionWriter(fakeContext.Object, new DataReceiver(), new DataProvider(fakeContext.Object), new HierarchyWriter(fakeContext.Object), new MetricWriter(fakeContext.Object)); sut.WriteSession(); Assert.That(fakeContext.Object.Sessions.Count, Is.EqualTo(1)); Assert.That(fakeContext.Object.Containers.Count, Is.EqualTo(5)); Assert.That(fakeContext.Object.Sensors.Count, Is.EqualTo(19)); Assert.That(fakeContext.Object.Metrics.Count, Is.EqualTo(19)); }
protected override void ChannelRead0(IChannelHandlerContext ctx, IObject msg) { switch (msg) { case TResPQ resPq: Guard.That(resPq.Nonce).IsItemsEquals(_nonce); Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TResPQ step complete"); var requestReqDhParams = Step2ClientHelper.GetRequest(resPq, ClientSettings.PublicKey, out _newNonce); ctx.WriteAndFlushAsync(requestReqDhParams); break; case TServerDHParamsOk dhParamsOk: Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TServerDHParamsOk step complete"); var request = Step3ClientHelper.GetRequest(dhParamsOk, _newNonce, out _clientAgree, out var serverTime); ClientSettings.ClientSession.TimeOffset = serverTime - (int)DateTimeOffset.Now.ToUnixTimeSeconds(); SessionWriter.Save(ClientSettings.ClientSession) .ContinueWith(_ => ctx.WriteAndFlushAsync(request)); break; case TDhGenOk dhGenOk: Log.Debug($"#{ClientSettings.ClientSession.SessionId}: TDhGenOk step complete"); ClientSettings.ClientSession.AuthKey = new AuthKey(_clientAgree); ClientSettings.ClientSession.ServerSalt = SaltHelper.ComputeSalt(_newNonce, dhGenOk.ServerNonce); SessionWriter.Save(ClientSettings.ClientSession) .ContinueWith(_ => ctx.FireUserEventTriggered(ESystemNotification.HandshakeComplete)); break; case TServerDHParamsFail _: case TDhGenRetry _: case TDhGenFail _: throw new NotSupportedException(); default: ctx.FireChannelRead(msg); break; } }
public void GenerateFile() { // Get templates string templatePath = AssetDatabaseExt.GetAssetFilePath(TemplateFile); var parser = new TemplateParser(templatePath); parser.Parse(); ITemplate template = parser.GetParsedTemplate(); // Build session ISession session = BuildSession(template); // Write session to file Directory.CreateDirectory(OutputFolder); SessionWriter writer = new SessionWriter(); writer.WriteSession(session, OutputPath); Debug.Log($"Menu script generated at '{OutputPath}'."); }
protected override void Encode(IChannelHandlerContext context, IObject message, IByteBuffer output) { var newMessageId = ClientSettings.ClientSession.GenerateMessageId(); SessionWriter.Save(ClientSettings.ClientSession); Log.Debug($"#{ClientSettings.ClientSession.SessionId}: Send handshake message {message} with id : {newMessageId}"); output.WriteLongLE(0); output.WriteLongLE(newMessageId); var dataBuffer = Serializer.Serialize(message); try { output.WriteIntLE(dataBuffer.ReadableBytes); output.WriteBytes(dataBuffer); } finally { dataBuffer.SafeRelease(); } }