private void OnDropBT(object sender, SurfaceDragDropEventArgs e)
        {
            var element = e.OriginalSource as FrameworkElement;
            if (element != null)
            {
                if (element.DataContext is BluetoothDevice)
                {
                    // Target is a Bluetooth device
                    var device = element.DataContext as BluetoothDevice;

                    if (e.Cursor.Data is ContentItem)
                    {
                        var ci = e.Cursor.Data as ContentItem;
                        ObexItem oi = null;
                        if (ci.IsPictureItem)
                        {
                            oi = new ObexImage() { ImageUri = new Uri("pack://application:,,,/" + ci.FileName) };
                        }
                        else if (ci.IsVisitItem)
                        {
                            oi = new ObexContactItem()
                            {
                                FirstName = ci.Name,
                                LastName = ci.FileName,
                                EmailAddress = ci.Email,
                                MobileTelephoneNumber = ci.Tlf
                            };
                        }
                        if (oi != null)
                        {
                            // Pause discovery as it interferes with/slows down beam process
                            _monitor.StopDiscovery();

                            // Create the new request and write the contact details
                            var owr = new ObexWebRequest(new Uri("obex://" + device.DeviceAddress.ToString() + "/" + oi.FileName));
                            System.IO.Stream s = owr.GetRequestStream();
                            oi.WriteToStream(s);

                            owr.ContentType = oi.ContentType;
                            owr.ContentLength = s.Length;
                            s.Close();

                            // Beam the item on new thread
                            System.Threading.ThreadPool.QueueUserWorkItem(BeamObject, owr);
                        }
                        // Return item to the scatter view
                        TargetItems.Add(e.Cursor.Data as ContentItem);
                        var item = scatterViewTarget.Items[scatterViewTarget.Items.Count - 1];
                        favouriteStack.RemoveInstancePropertyObject(item);
                    }

                }

                // Otherwise not supported
            }
        }
Esempio n. 2
0
        private void Transfer(ObexTransferObject obj)
        {
            ObexWebResponse rsp = null;
            ObexWebRequest req;

            try
            {
                Uri uri = new Uri("obex://" + obj.Target.address.ToString() + "/" + obj.Filename);
                req = new ObexWebRequest(uri);
                req.Timeout = 15000;
                using(Stream content = req.GetRequestStream())
                {
                    content.Write(obj.Data, 0, obj.Data.Length);
                    content.Flush();
                    req.ContentLength = obj.Data.Length;
                    req.ContentType = obj.MimeType;
                }
                rsp = (req.GetResponse() as ObexWebResponse);
            }
            catch(Exception e)
            {
                General.WriteLogLine(e.GetType().Name + " while transferring '" + obj.Filename + "' data to " + obj.Target.address.ToString() + ": " + e.Message);
            }

            if((rsp != null) && (rsp.StatusCode != ObexStatusCode.OK))
                General.WriteLogLine("Received response code: " + rsp.StatusCode + " while transferring '" + obj.Filename + "' data to " + obj.Target.address.ToString());

            if(rsp != null)
                rsp.Close();
        }
        private void OnDrop(object sender, SurfaceDragDropEventArgs e)
        {
            FrameworkElement element = e.OriginalSource as FrameworkElement;
            if (element != null)
            {
                ContentItem content = e.Cursor.Data as ContentItem;
                // ensuring that target is a Bluetooth device and data is ContentItem
                if (element.DataContext is BluetoothDeviceInfo && content != null)
                {
                    BluetoothDeviceInfo device = element.DataContext as BluetoothDeviceInfo;

                    // Pause discovery as it interferes with/slows down beam process
                    BlueTimer.Stop();

                    // Create the new request and write the contact details
                    //ObexWebRequest owr = new ObexWebRequest(new Uri("obex://" + device.DeviceAddress.ToString() + "/" + oi.FileName));

                    ObexWebRequest owr = new ObexWebRequest(new Uri(String.Format("obex://{0}/{1}",  device.DeviceAddress, content.ObexFileName)));
                    using (System.IO.Stream s = owr.GetRequestStream())
                    {
                        StreamHelper.WriteToStream(s, content);

                        owr.ContentType = content.ObexContentType;
                        owr.ContentLength = s.Length;
                        s.Close();
                    }

                    // Beam the item on new thread
                    System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(BeamObject), owr);
                }
            }
        }