Example #1
0
        public static async Task <TgConnection> EstablishConnection(
            ILogger logger,
            ConnectInfo connectInfo,
            TgCallMiddlewareChain callMiddlewareChain,
            TcpClientConnectionHandler?connHandler = null
            )
        {
            var endpoint = connectInfo.Endpoint;

            Helpers.Assert(endpoint != null, "endpoint == null");
            var tcpClient = await CreateTcpClient(endpoint !, connHandler).ConfigureAwait(false);

            var tcpTransport = new TcpTransport(tcpClient);

            if (connectInfo.NeedsInAuth)
            {
                var mtPlainTransport = new MtProtoPlainTransport(tcpTransport);
                var result           = await Authenticator.DoAuthentication(mtPlainTransport).ConfigureAwait(false);

                connectInfo.SetAuth(result);
            }

            var session           = connectInfo.ToSession().AsVar();
            var mtCipherTransport = new MtProtoCipherTransport(tcpTransport, session);
            var transport         = new TgCustomizedTransport(new TgTransport(logger, mtCipherTransport, session), callMiddlewareChain);

            // TODO: separate Config
            var config  = new GetConfig();
            var request = new InitConnection <GetConfig, Config>(
                apiId: session.Get().ApiId,
                appVersion: "1.0.0",
                deviceModel: "PC",
                langCode: "en",
                query: config,
                systemVersion: "Win 10.0",
                systemLangCode: "en",
                langPack: "tdesktop",
                proxy: null,
                @params: null
                );
            var invokeWithLayer = new InvokeWithLayer <InitConnection <GetConfig, Config>, Config>(
                layer: SchemeInfo.LayerVersion,
                query: request
                );
            var cfg = await transport.Call(invokeWithLayer).ConfigureAwait(false);

            DcInfoKeeper.Update(cfg);
            return(new TgConnection(session, transport, cfg));
        }
Example #2
0
            protected override JobHandle OnUpdate(JobHandle inputDeps)
            {
                if (groupToInit.GetEntityArray().Length == 0)
                {
                    return(inputDeps);
                }
                var sharedIdxs = new List <SharedComponentIndexToAddComponentData>(20);

                EntityManager.GetAllUniqueSharedComponentData(sharedIdxs);
                for (int i = 0, length = sharedIdxs.Count; i < length; ++i)
                {
                    var sharedIdx = sharedIdxs[i];
                    groupToInit.SetFilter(sharedIdx);
                    if (groupToInit.GetEntityArray().Length == 0)
                    {
                        continue;
                    }
                    var entities      = new NativeArray <Entity>(groupToInit.GetEntityArray().ToArray(), Allocator.TempJob);
                    var neuralNetwork = neuralNetworkGroup.GetSharedComponentDataArray <NeuralNetworkComponentData>()[sharedIdx.Index];
                    var inputCount    = neuralNetwork.PerceptronPerLayerCount[0];


                    neuralNetwork.Inputs = new NativeArray <float>(inputCount * entities.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory);
                    int perceptronCount = inputCount, connectionCount = 0, previousCount = perceptronCount;
                    for (int j = 1, length2 = neuralNetwork.PerceptronPerLayerCount.Length; j < length2; ++j)
                    {
                        int perceptronPerLayer = neuralNetwork.PerceptronPerLayerCount[j];
                        connectionCount += previousCount * perceptronPerLayer;
                        perceptronCount += perceptronPerLayer;
                        previousCount    = perceptronPerLayer;
                    }
                    neuralNetwork.ConnectionCountPerNetwork = connectionCount;
                    neuralNetwork.PerceptronCountPerNetwork = perceptronCount;
                    neuralNetwork.ResultCountPerNetwork     = perceptronCount - inputCount;
                    neuralNetwork.PerceptronCount           = (perceptronCount * entities.Length);
                    neuralNetwork.Results     = new NativeArray <float>((perceptronCount * entities.Length) - (inputCount * entities.Length), Allocator.Persistent, NativeArrayOptions.UninitializedMemory);
                    neuralNetwork.Connections = new NativeArray <float>(connectionCount * entities.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory);
                    var randomNumbers = new NativeList <float>(connectionCount * entities.Length, Allocator.TempJob);
                    for (int j = 0, count = connectionCount * entities.Length; j < count; ++j)
                    {
                        randomNumbers.Add(UnityEngine.Random.Range(-neuralNetwork.WeightRange, neuralNetwork.WeightRange));
                    }

                    var job = new InitConnection {
                        PerceptronPerLayer   = neuralNetwork.PerceptronPerLayerCount,
                        Connections          = neuralNetwork.Connections,
                        RandomNumbers        = randomNumbers,
                        ConnectionPerNetwork = connectionCount
                    };
                    var handle = job.ScheduleBatch(perceptronCount * entities.Length, perceptronCount, inputDeps);

                    JobHandle.ScheduleBatchedJobs();

                    handle.Complete();

                    for (int j = 0, entityCount = entities.Length; j < entityCount; ++j)
                    {
                        var entity = entities[j];
                        EntityManager.AddSharedComponentData(entity, neuralNetwork);
                        EntityManager.AddComponentData(entity, new InitializedComponentData());
                        EntityManager.RemoveComponent <SharedComponentIndexToAddComponentData>(entity);
                        EntityManager.RemoveComponent <InitializeNeuralNetworkComponentData>(entity);
                    }

                    randomNumbers.Dispose();
                    entities.Dispose();
                }
                return(inputDeps);
            }
Example #3
0
 private void RaiseConnectionStateChange()
 {
     RaisePropertyChanged(() => IsConnected);
     InitConnection.RaiseCanExecuteChanged();
 }