public MTProtoClientConnection( [NotNull] IClientTransportConfig clientTransportConfig, [NotNull] IClientTransportFactory clientTransportFactory, [NotNull] TLRig tlRig, [NotNull] IMessageIdGenerator messageIdGenerator, [NotNull] IMessageCodec messageCodec) { Argument.IsNotNull(() => clientTransportConfig); Argument.IsNotNull(() => clientTransportFactory); Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => messageIdGenerator); Argument.IsNotNull(() => messageCodec); _tlRig = tlRig; _messageIdGenerator = messageIdGenerator; _messageCodec = messageCodec; DefaultRpcTimeout = Defaults.RpcTimeout; DefaultConnectTimeout = Defaults.ConnectTimeout; _methods = new MTProtoAsyncMethods(this); InitResponseDispatcher(_responseDispatcher); // Init transport. _clientTransport = clientTransportFactory.CreateTransport(clientTransportConfig); // Connector in/out. _clientTransport.ObserveOn(DefaultScheduler.Instance).Do(bytes => LogMessageInOut(bytes, "IN")).Subscribe(ProcessIncomingMessageBytes); }
public AuthKeyNegotiator( [NotNull] IClientTransportConfig clientTransportConfig, [NotNull] IMTProtoClientBuilder mtProtoBuilder, [NotNull] TLRig tlRig, [NotNull] INonceGenerator nonceGenerator, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices, [NotNull] IKeyChain keyChain) { Argument.IsNotNull(() => clientTransportConfig); Argument.IsNotNull(() => mtProtoBuilder); Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => nonceGenerator); Argument.IsNotNull(() => hashServices); Argument.IsNotNull(() => encryptionServices); Argument.IsNotNull(() => keyChain); _clientTransportConfig = clientTransportConfig; _mtProtoBuilder = mtProtoBuilder; _tlRig = tlRig; _nonceGenerator = nonceGenerator; _hashServices = hashServices; _encryptionServices = encryptionServices; _keyChain = keyChain; }
private object ReadBodyInternal(TLSerializationContext context, TLSerializationMode?itemsSerializationModeOverride = null) { Func <TLSerializationContext, TLSerializationMode?, object> read; if (IsItemsTypeObject) { read = (sc, m) => TLRig.Deserialize <T>(sc, m); } else { ITLSerializer serializer = GetSerializer(context); read = serializer.Read; } int length = context.Streamer.ReadInt32(); var list = (List <T>)Activator.CreateInstance(SupportedTypeInternal, length); for (int i = 0; i < length; i++) { var item = (T)read(context, itemsSerializationModeOverride); list.Add(item); } return(list); }
public KeyChain([NotNull] TLRig tlRig, [NotNull] IHashServices hashServices) { Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => hashServices); _tlRig = tlRig; _hashServices = hashServices; }
public void Write(object obj, TLSerializationContext context, TLSerializationMode?modeOverride = null) { Type objType = obj.GetType(); ITLSingleConstructorSerializer serializer; if (!_serializersTypeIndex.TryGetValue(objType, out serializer)) { throw new NotSupportedException(string.Format("Object type '{0}' is not supported by this serializer.", objType)); } TLRig.Serialize(obj, context, modeOverride); }
/// <summary> /// Initializes a new instance of the <see cref="MessageCodec" /> class. /// </summary> /// <exception cref="System.ArgumentNullException">The <paramref name="tlRig" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentNullException">The <paramref name="hashServices" /> is <c>null</c>.</exception> /// <exception cref="System.ArgumentNullException">The <paramref name="encryptionServices" /> is <c>null</c>.</exception> public MessageCodec([NotNull] TLRig tlRig, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices, IRandomGenerator randomGenerator) { Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => hashServices); Argument.IsNotNull(() => encryptionServices); _tlRig = tlRig; _hashServices = hashServices; _encryptionServices = encryptionServices; _randomGenerator = randomGenerator; }
private object ReadBodyInternal(TLSerializationContext context, TLSerializationMode?itemsSerializationModeOverride = null) { int length = context.Streamer.ReadInt32(); var list = (List <T>)Activator.CreateInstance(SupportedTypeInternal, length); for (int i = 0; i < length; i++) { var item = TLRig.Deserialize <T>(context, itemsSerializationModeOverride); list.Add(item); } return(list); }
public MTProtoClientConnection( [NotNull] IClientTransportConfig clientTransportConfig, [NotNull] IClientTransportFactory clientTransportFactory, [NotNull] TLRig tlRig, [NotNull] IMessageIdGenerator messageIdGenerator, [NotNull] IMessageCodec messageCodec) { _tlRig = tlRig; _messageIdGenerator = messageIdGenerator; _messageCodec = messageCodec; DefaultRpcTimeout = Defaults.RpcTimeout; DefaultConnectTimeout = Defaults.ConnectTimeout; _methods = new MTProtoAsyncMethods(this); _updatesHandler = new UpdatesHandler(_tlRig); InitResponseDispatcher(_responseDispatcher); // Init transport. _clientTransport = clientTransportFactory.CreateTransport(clientTransportConfig); // Connector in/out. _clientTransport.ObserveOn(DefaultScheduler.Instance).Do(bytes => LogMessageInOut(bytes, "IN")).Subscribe(ProcessIncomingMessageBytes); _clientTransport.RegisterOnDisconnectInternally(() => { Console.WriteLine("Client has been closed internally."); if (_onClosedInternally != null) { _onClosedInternally(this, null); } if (_state == MTProtoConnectionState.Disconnected) { return; } _state = MTProtoConnectionState.Disconnected; if (_connectionCts != null) { _connectionCts.Cancel(); _connectionCts.Dispose(); _connectionCts = null; } }); }
public AuthKeyNegotiator( [NotNull] IClientTransportConfig clientTransportConfig, [NotNull] IMTProtoClientBuilder mtProtoBuilder, [NotNull] TLRig tlRig, [NotNull] INonceGenerator nonceGenerator, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices, [NotNull] IKeyChain keyChain) { _clientTransportConfig = clientTransportConfig; _mtProtoBuilder = mtProtoBuilder; _tlRig = tlRig; _nonceGenerator = nonceGenerator; _hashServices = hashServices; _encryptionServices = encryptionServices; _keyChain = keyChain; }
protected override Message ReadTypedBody(TLSerializationContext context) { TLStreamer streamer = context.Streamer; ulong msgId = streamer.ReadUInt64(); uint seqNo = streamer.ReadUInt32(); int bodyLength = streamer.ReadInt32(); if (streamer.BytesTillEnd < bodyLength) { throw new TLSerializationException(String.Format("Body length ({0}) is greated than available to read bytes till end ({1}).", bodyLength, streamer.BytesTillEnd)); } object body = TLRig.Deserialize(context); return(new Message(msgId, seqNo, body)); }
public MTProtoClientBuilder( [NotNull] IClientTransportFactory clientTransportFactory, [NotNull] TLRig tlRig, [NotNull] IMessageIdGenerator messageIdGenerator, [NotNull] IMessageCodec messageCodec, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices, [NotNull] INonceGenerator nonceGenerator, [NotNull] IKeyChain keyChain) { _clientTransportFactory = clientTransportFactory; _tlRig = tlRig; _messageIdGenerator = messageIdGenerator; _messageCodec = messageCodec; _hashServices = hashServices; _encryptionServices = encryptionServices; _nonceGenerator = nonceGenerator; _keyChain = keyChain; }
public AuthKeyNegotiator([NotNull] IMTProtoConnectionFactory connectionFactory, [NotNull] TLRig tlRig, [NotNull] INonceGenerator nonceGenerator, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices, [NotNull] IKeyChain keyChain, [NotNull] ITransportConfigProvider transportConfigProvider) { Argument.IsNotNull(() => connectionFactory); Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => nonceGenerator); Argument.IsNotNull(() => hashServices); Argument.IsNotNull(() => encryptionServices); Argument.IsNotNull(() => keyChain); Argument.IsNotNull(() => transportConfigProvider); _connectionFactory = connectionFactory; _tlRig = tlRig; _nonceGenerator = nonceGenerator; _hashServices = hashServices; _encryptionServices = encryptionServices; _keyChain = keyChain; _transportConfigProvider = transportConfigProvider; }
private void WriteBodyInternal(object obj, TLSerializationContext context, TLSerializationMode?itemsSerializationModeOverride = null) { var vector = obj as List <T>; if (vector == null) { // TODO: log wrong type. throw new InvalidOperationException("This serializer supports only List<> types."); } int length = vector.Count; // Length. context.Streamer.WriteInt32(length); // Child objects. for (int i = 0; i < length; i++) { TLRig.Serialize(vector[i], context, itemsSerializationModeOverride); } }
private static MTProtoClientBuilder CreateDefault() { var clientTransportFactory = new ClientTransportFactory(); var tlRig = new TLRig(); var messageIdGenerator = new MessageIdGenerator(); var hashServices = new HashServices(); var encryptionServices = new EncryptionServices(); var randomGenerator = new RandomGenerator(); var messageCodec = new MessageCodec(tlRig, hashServices, encryptionServices, randomGenerator); var keyChain = new KeyChain(tlRig, hashServices); var nonceGenerator = new NonceGenerator(); return new MTProtoClientBuilder(clientTransportFactory, tlRig, messageIdGenerator, messageCodec, hashServices, encryptionServices, nonceGenerator, keyChain); }
public MTProtoConnection(TransportConfig transportConfig, [NotNull] ITransportFactory transportFactory, [NotNull] TLRig tlRig, [NotNull] IMessageIdGenerator messageIdGenerator, [NotNull] IHashServices hashServices, [NotNull] IEncryptionServices encryptionServices) { Argument.IsNotNull(() => transportFactory); Argument.IsNotNull(() => tlRig); Argument.IsNotNull(() => messageIdGenerator); Argument.IsNotNull(() => hashServices); Argument.IsNotNull(() => encryptionServices); _transportFactory = transportFactory; _tlRig = tlRig; _messageIdGenerator = messageIdGenerator; _hashServices = hashServices; _encryptionServices = encryptionServices; DefaultRpcTimeout = Defaults.RpcTimeout; DefaultConnectTimeout = Defaults.ConnectTimeout; _tlRig.PrepareSerializersForAllTLObjectsInAssembly(typeof(ITLAsyncMethods).GetAssemblyEx()); _sessionId = GetNextSessionId(); // Init transport. _transport = _transportFactory.CreateTransport(transportConfig); // History of messages in/out. _inMessages.ObserveOn(DefaultScheduler.Instance).Subscribe(_inMessagesHistory); _outMessages.ObserveOn(DefaultScheduler.Instance).Subscribe(_outMessagesHistory); // Connector in/out. _transport.ObserveOn(DefaultScheduler.Instance).Do(bytes => LogMessageInOut(bytes, "IN")).Subscribe(ProcessIncomingMessageBytes); _outMessages.ObserveOn(DefaultScheduler.Instance) .Do(message => LogMessageInOut(message.MessageBytes, "OUT")) .Subscribe(message => _transport.Send(message.MessageBytes)); _inMessages.ObserveOn(DefaultScheduler.Instance).Subscribe(ProcessIncomingMessage); }
protected override void WriteTypedBody(Message message, TLSerializationContext context) { TLStreamer streamer = context.Streamer; streamer.WriteUInt64(message.MsgId); streamer.WriteUInt32(message.Seqno); // Skip 4 bytes for a body length. streamer.Position += 4; long bodyStartPosition = streamer.Position; TLRig.Serialize(message.Body, context, TLSerializationMode.Boxed); long bodyEndPosition = streamer.Position; long bodyLength = bodyEndPosition - bodyStartPosition; streamer.Position = bodyStartPosition - 4; // Write a body length. streamer.WriteInt32((int)bodyLength); streamer.Position = bodyEndPosition; }
public UpdatesHandler(TLRig tlRig) { _tlRig = tlRig; }
/// <summary> /// Initializes a new instance of the <see cref="TLSerializationContext" /> class. /// </summary> /// <param name="rig">TL rig.</param> /// <param name="streamer">TL streamer.</param> public TLSerializationContext(TLRig rig, TLStreamer streamer) { Rig = rig; Streamer = streamer; }
protected override void WriteValue(object propertyValue, TLSerializationContext context) { TLRig.Serialize(propertyValue, context, TLSerializationMode.Boxed); }
public KeyChain([NotNull] TLRig tlRig, [NotNull] IHashServices hashServices) { _tlRig = tlRig; _hashServices = hashServices; }
public GzipPackedHandler(TLRig tlRig, UpdatesHandler handler) { _tlRig = tlRig; _handler = handler; }
protected override object ReadValue(TLSerializationContext context) { return(TLRig.Deserialize <object>(context, TLSerializationMode.Boxed)); }
public RpcResultHandler(IRequestsManager requestsManager, TLRig tlRig) { _requestsManager = requestsManager; _tlRig = tlRig; }