public static async Task DiscoverApp(Packet packet) { var ap = new TcpCDiscoverAppInstances(packet); var apps = AppManager.PublishedApps.FindAll(x => x.AppId.SequenceEqual(ap.AppId)); var mapped = new byte[apps.Count][]; for (var i = 0; i < apps.Count; i++) { mapped[i] = apps[i].InstanceId; } var reply = new TcpSAppInstanceReply(mapped, packet.Nonce); await packet.Connection.Stream.WriteAsync(reply.Build()); }
/// <summary> /// Discovers apps on the network /// </summary> /// <param name="description">The app description to search for</param> /// <returns>An array of instance IDs for running apps</returns> public async Task <byte[][]> DiscoverApps(string description) { byte[] appId = new byte[10]; using (SHA1 sha1 = SHA1.Create()) { appId = sha1.ComputeHash(Encoding.UTF8.GetBytes(description)).Take(10).ToArray(); } TaskCompletionSource <byte[][]> ss = new TaskCompletionSource <byte[][]>(); uint nonce = Packet.WatchNonce(async packet => { await Task.Run(() => { var pack = new TcpSAppInstanceReply(packet); ss.SetResult(pack.Instances); }); }); var c = new TcpCDiscoverAppInstances(appId, nonce); TCPConnection.Stream.Write(c.Build()); return(await ss.Task); }