示例#1
0
        private async Task ProcessServerMessage(NetworkStream stream)
        {
            switch (await stream.ReadObjAsync(ReportProgress))
            {
            case TrackMetadata[] metas:
                var items = metas.Select(x => new ListViewItem(x.ListItem)).ToArray();
                Dispatcher.Post(() =>
                {
                    lvRemoteList.Items.Clear();
                    lvRemoteList.Items.AddRange(items);
                });
                break;

            case FileBlob file:
                var repo = await Dispatcher.Send(() => TbPath.Text);

                var path      = Path.Combine(repo, file.Name);
                var preExists = File.Exists(path);
                try
                {
                    using (FileStream fs = File.Create(path))
                    {
                        await fs.WriteAsync(file.Body, 0, file.Body.Length).ContinueWith(async t =>
                        {
                            await t;
                            fs.Close();
                            if (!preExists)
                            {
                                Dispatcher.Post(() =>
                                {
                                    var meta = CommonBehavior.GetMetadata(Wmp, path);
                                    Playlist.Add(new ListViewItem(meta.ListItem)
                                    {
                                        Tag = meta
                                    });
                                });
                            }
                        }).ConfigureAwait(false);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
                ServerMessage = null;
                Dispatcher.Post(() => { Text = "Music Player Client"; });
                break;

            case Announcement msg:
                ServerMessage = msg.Message;
                ReportProgress(0);
                break;
            }
        }