Пример #1
0
        public static async Task Publish(Packet pack)
        {
            var ap = new TcpCPublish(pack);

            byte[] reply = new byte[0];
            try
            {
                using (SHA1 sha1 = SHA1.Create())
                {
                    byte[] apByt   = Encoding.UTF8.GetBytes(ap.Description);
                    byte[] appId   = sha1.ComputeHash(apByt).Take(10).ToArray();
                    byte[] instByt = Encoding.UTF8.GetBytes(pack.Connection.Socket.RemoteEndPoint + "-" + ap);
                    byte[] instId  = sha1.ComputeHash(instByt).Take(10).ToArray();
                    var    pa      = new AppManager.PublishedApp()
                    {
                        AppId       = appId,
                        Connection  = pack.Connection,
                        InstanceId  = instId,
                        Description = ap.Description
                    };
                    AppManager.PublishedApps.Add(pa);
                    TcpManager.AppsByConnection[pack.Connection.Socket].Add(pa);
                    reply = new TcpSPublishReply(true, appId, instId, pack.Nonce).Build();
                }
            }
            catch (Exception e)
            {
                Log.Error(e, "Error while publishing an app");
                reply = new TcpSPublishReply(false, new byte[10], new byte[10], pack.Nonce).Build();
            }
            await pack.Connection.Stream.WriteAsync(reply);
        }
Пример #2
0
        /// <summary>
        /// Publishes a new app to the entry point
        /// </summary>
        /// <param name="description">The app description</param>
        /// <param name="callback">A callback for when connections become established</param>
        /// <returns>A task</returns>
        public async Task Publish(string description, ConnectionEstablishCallback callback)
        {
            if (_tcp == null || !_tcp.Connected)
            {
                return;
            }
            uint n = Packet.WatchNonce(async packet =>
            {
                await Task.Run(() =>
                {
                    TcpSPublishReply repl = new TcpSPublishReply(packet);
                    _registeredApps.Add(new StoredApp()
                    {
                        AppId       = repl.AppId,
                        Callback    = callback,
                        Description = description,
                        InstanceId  = repl.InstanceId
                    });
                    Log.Debug("App {Description} ({AppId}) registered as instance {InstanceId}", description, repl.ReadableAppId, repl.ReadableInstanceId);
                });
            });
            var pub = new TcpCPublish(description, n);

            TransmitRaw(pub);
        }