/Bluetooth/Samples/vcs/ObjectPushProfile/ObjectPushProfileApplication/Form1.cs

# · C# · 419 lines · 393 code · 26 blank · 0 comment · 67 complexity · 0b58b157b816ef52f45b60c7e8a7d73f MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using C4F.DevKit.Bluetooth.ObjectPushProfile;
  9. using C4F.DevKit.Bluetooth.ServiceAndDeviceDiscovery;
  10. using System.Net.Sockets;
  11. using System.IO;
  12. namespace ObjectPushProfileApplication
  13. {
  14. public partial class Form1 : Form
  15. {
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20. List<Device> devList = null;
  21. RemoteService OPPService = null;
  22. NetworkStream networkStream = null;
  23. List<RemoteService> OPPServiceList;
  24. bool isAsync = true;
  25. private void btnDiscover_Click(object sender, EventArgs e)
  26. {
  27. cmbDevice.Items.Clear();
  28. cmbServices.Items.Clear();
  29. cmbDevice.Text = "";
  30. cmbServices.Text = "";
  31. cmbServices.Enabled = false;
  32. btnConnect.Enabled = false;
  33. this.Cursor = Cursors.WaitCursor;
  34. devList = deviceServicesManager1.DiscoverAllDevices();
  35. if (devList.Count != 0)
  36. {
  37. foreach (Device dev in devList)
  38. cmbDevice.Items.Add(dev.Name);
  39. }
  40. if (devList.Count > 0)
  41. {
  42. cmbServices.Enabled = true;
  43. }
  44. btnOperation.Enabled = false;
  45. this.Cursor = Cursors.Default;
  46. }
  47. private void cmbServices_Enter(object sender, EventArgs e)
  48. {
  49. this.Cursor = Cursors.WaitCursor;
  50. cmbServices.Items.Clear();
  51. if (devList != null && devList.Count != 0)
  52. {
  53. foreach (Device dev in devList)
  54. {
  55. if (dev.Name == cmbDevice.Text)
  56. {
  57. OPPServiceList =
  58. deviceServicesManager1.DiscoverServicesByType(dev, ServiceType.OBEXObjectPush);
  59. if (OPPServiceList != null && OPPServiceList.Count != 0)
  60. {
  61. foreach (RemoteService remServ in OPPServiceList)
  62. {
  63. cmbServices.Items.Add(remServ.Name);
  64. }
  65. }
  66. break;
  67. }
  68. }
  69. }
  70. if (cmbServices.Items.Count > 0)
  71. btnConnect.Enabled = true;
  72. btnOperation.Enabled = false;
  73. this.Cursor = Cursors.Default;
  74. }
  75. private void btnConnect_Click(object sender, EventArgs e)
  76. {
  77. try
  78. {
  79. this.Cursor = Cursors.WaitCursor;
  80. foreach (RemoteService rem in OPPServiceList)
  81. {
  82. if (cmbServices.Text == rem.Name)
  83. {
  84. OPPService = rem;
  85. networkStream = OPPService.Connect();
  86. btnConnect.Enabled = false;
  87. cmbServices.Enabled = false;
  88. oppManager1.NetworkStream = networkStream;
  89. oppManager1.Connect();
  90. oppManager1.ObjectPushCompleted += new BluetoothOPPManager.ObjectPushCompletedEventHandler(oppManager1_ObjectPushCompleted);
  91. oppManager1.BusinessCardExchangeCompleted += new BluetoothOPPManager.BusinessCardExchangeCompletedEventHandler(oppManager1_BusinessCardExchangeCompleted);
  92. oppManager1.BusinessCardPullCompleted += new BluetoothOPPManager.BusinessCardPullCompletedEventHandler(oppManager1_BusinessCardPullCompleted);
  93. btnOperation.Enabled = true;
  94. break;
  95. }
  96. }
  97. }
  98. catch (ServiceConnectionException servEx)
  99. {
  100. btnConnect.Enabled = true;
  101. cmbServices.Enabled = true;
  102. MessageBox.Show(servEx.Message, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  103. }
  104. catch (Exception ex)
  105. {
  106. btnConnect.Enabled = true;
  107. cmbServices.Enabled = true;
  108. MessageBox.Show(ex.Message, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  109. }
  110. this.Cursor = Cursors.Default;
  111. }
  112. void oppManager1_BusinessCardPullCompleted(object sender, BusinessCardPullCompletedEventArgs e)
  113. {
  114. if (isAsync)
  115. {
  116. if (e.Error == null)
  117. {
  118. string cardName = txtOutputFolder.Text + "\\" + e.RemoteCardName;
  119. int i = 1;
  120. if (File.Exists(cardName))
  121. {
  122. string extension = cardName.Substring(cardName.LastIndexOf(".") + 1);
  123. cardName = cardName.Remove(cardName.LastIndexOf("."));
  124. while (File.Exists(cardName + " (" + i + ")" + "." + extension))
  125. {
  126. i++;
  127. }
  128. cardName = cardName + " (" + i + ")" + "." + extension;
  129. }
  130. File.WriteAllBytes(cardName, e.RemoteCardContents);
  131. MessageBox.Show("Business Card Pull Complete. " + Environment.NewLine +
  132. "Received File: " + cardName,
  133. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  134. }
  135. else
  136. {
  137. string errorMsg = e.Error.Message;
  138. if (e.Error.InnerException != null)
  139. errorMsg += Environment.NewLine + "Error Details: " + e.Error.InnerException.Message;
  140. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  141. }
  142. }
  143. else isAsync = true;
  144. }
  145. void oppManager1_BusinessCardExchangeCompleted(object sender, BusinessCardExchangeCompletedEventArgs e)
  146. {
  147. if (isAsync)
  148. {
  149. if (e.Error == null)
  150. {
  151. string cardName = txtOutputFolder.Text + "\\" + e.OutputCardName;
  152. int i = 1;
  153. if (File.Exists(cardName))
  154. {
  155. string extension = cardName.Substring(cardName.LastIndexOf(".") + 1);
  156. cardName = cardName.Remove(cardName.LastIndexOf("."));
  157. while (File.Exists(cardName + " (" + i + ")" + "." + extension))
  158. {
  159. i++;
  160. }
  161. cardName = cardName + " (" + i + ")" + "." + extension;
  162. }
  163. File.WriteAllBytes(cardName, e.RemoteCardContents);
  164. MessageBox.Show("Business Card Exchange Complete. " + Environment.NewLine +
  165. "File Sent: " + e.LocalCardName + Environment.NewLine +
  166. "Received File: " + cardName,
  167. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  168. }
  169. else
  170. {
  171. string errorMsg = e.Error.Message;
  172. if (e.Error.InnerException != null)
  173. errorMsg += Environment.NewLine + "Error Details: " + e.Error.InnerException.Message;
  174. errorMsg += Environment.NewLine + "Input File: " + e.LocalCardName;
  175. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  176. }
  177. }
  178. else isAsync = true;
  179. }
  180. void oppManager1_ObjectPushCompleted(object sender, ObjectPushCompletedEventArgs e)
  181. {
  182. if (isAsync)
  183. {
  184. if (e.Error == null)
  185. MessageBox.Show("Object push completed. " + Environment.NewLine +
  186. "File Sent: " + e.LocalObjectName,
  187. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  188. else
  189. {
  190. string errorMsg = e.Error.Message;
  191. if (e.Error.InnerException != null)
  192. errorMsg += Environment.NewLine + "Error Details: " + e.Error.InnerException.Message;
  193. errorMsg += Environment.NewLine + "Input File: " + e.LocalObjectName;
  194. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  195. }
  196. }
  197. else isAsync = true;
  198. }
  199. private void Form1_Load(object sender, EventArgs e)
  200. {
  201. this.Cursor = Cursors.WaitCursor;
  202. btnConnect.Enabled = false;
  203. cmbServices.Enabled = false;
  204. txtOutputFolder.Text = Environment.CurrentDirectory;
  205. devList = deviceServicesManager1.DiscoverAllDevices();
  206. if (devList.Count != 0)
  207. {
  208. foreach (Device dev in devList)
  209. cmbDevice.Items.Add(dev.Name);
  210. }
  211. if (devList.Count > 0)
  212. cmbServices.Enabled = true;
  213. btnOperation.Enabled = false;
  214. this.Cursor = Cursors.Default;
  215. }
  216. private void btnOperation_Click(object sender, EventArgs e)
  217. {
  218. this.Cursor = Cursors.WaitCursor;
  219. switch (cmbOperation.Text)
  220. {
  221. case "Push File":
  222. openFileDialog1.Filter = "All files (*.*)|*.*";
  223. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  224. {
  225. if (!string.IsNullOrEmpty(openFileDialog1.FileName))
  226. {
  227. try
  228. {
  229. if (rbSync.Checked)
  230. {
  231. isAsync = false;
  232. oppManager1.PushObject(openFileDialog1.FileName);
  233. MessageBox.Show("Object push completed. " + Environment.NewLine +
  234. "File Sent: " +
  235. openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\") + 1),
  236. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  237. }
  238. else
  239. oppManager1.PushObjectAsync(openFileDialog1.FileName, null);
  240. }
  241. catch (Exception ex)
  242. {
  243. string errorMsg = ex.Message;
  244. if (ex.InnerException != null)
  245. errorMsg += Environment.NewLine + "Error Details: " + ex.InnerException.Message;
  246. errorMsg += Environment.NewLine + "Input File: " +
  247. openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\") + 1);
  248. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  249. }
  250. }
  251. }
  252. break;
  253. case "Pull Business Card":
  254. try
  255. {
  256. if (rbSync.Checked)
  257. {
  258. isAsync = false;
  259. string cardName;
  260. byte[] card;
  261. oppManager1.PullBusinessCard(out cardName, out card);
  262. cardName = txtOutputFolder.Text + "\\" + cardName;
  263. int i = 1;
  264. if (File.Exists(cardName))
  265. {
  266. string extension = cardName.Substring(cardName.LastIndexOf(".") + 1);
  267. cardName = cardName.Remove(cardName.LastIndexOf("."));
  268. while (File.Exists(cardName + " (" + i + ")" + "." + extension))
  269. {
  270. i++;
  271. }
  272. cardName = cardName + " (" + i + ")" + "." + extension;
  273. }
  274. File.WriteAllBytes(cardName, card);
  275. MessageBox.Show("Business Card Pull Complete. " + Environment.NewLine +
  276. "Received File: " + cardName,
  277. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  278. }
  279. else
  280. oppManager1.PullBusinessCardAsync(null);
  281. }
  282. catch (Exception ex)
  283. {
  284. string errorMsg = ex.Message;
  285. if (ex.InnerException != null)
  286. errorMsg += Environment.NewLine + "Error Details: " + ex.InnerException.Message;
  287. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  288. }
  289. break;
  290. case "Exchange Business Card":
  291. openFileDialog1.Filter = "vcf files (*.vcf)|*.vcf";
  292. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  293. {
  294. if (!string.IsNullOrEmpty(openFileDialog1.FileName))
  295. {
  296. try
  297. {
  298. if (rbSync.Checked)
  299. {
  300. isAsync = false;
  301. string cardName;
  302. byte[] card;
  303. oppManager1.ExchangeBusinessCards(openFileDialog1.FileName, out cardName, out card);
  304. cardName = txtOutputFolder.Text + "\\" + cardName;
  305. int i = 1;
  306. if (File.Exists(cardName))
  307. {
  308. string extension = cardName.Substring(cardName.LastIndexOf(".") + 1);
  309. cardName = cardName.Remove(cardName.LastIndexOf("."));
  310. while (File.Exists(cardName + " (" + i + ")" + "." + extension))
  311. {
  312. i++;
  313. }
  314. cardName = cardName + " (" + i + ")" + "." + extension;
  315. }
  316. File.WriteAllBytes(cardName, card);
  317. MessageBox.Show("Business Card Exchange Complete. " + Environment.NewLine +
  318. "File Sent: " +
  319. openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\"))
  320. + Environment.NewLine + "Received File: " + cardName,
  321. "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Information);
  322. }
  323. else
  324. oppManager1.ExchangeBusinessCardsAsync(openFileDialog1.FileName, null);
  325. }
  326. catch (Exception ex)
  327. {
  328. string errorMsg = ex.Message;
  329. if (ex.InnerException != null)
  330. errorMsg += Environment.NewLine + "Error Details: " + ex.InnerException.Message;
  331. errorMsg += Environment.NewLine + "Input File: " +
  332. openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf("\\") + 1);
  333. MessageBox.Show(errorMsg, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  334. }
  335. }
  336. }
  337. break;
  338. }
  339. this.Cursor = Cursors.Default;
  340. }
  341. private void btnChangeOutputFolder_Click(object sender, EventArgs e)
  342. {
  343. if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  344. {
  345. if (!string.IsNullOrEmpty(folderBrowserDialog1.SelectedPath))
  346. txtOutputFolder.Text = folderBrowserDialog1.SelectedPath;
  347. else
  348. txtOutputFolder.Text = Environment.CurrentDirectory;
  349. }
  350. }
  351. private void btnExit_Click(object sender, EventArgs e)
  352. {
  353. Disconnect();
  354. this.Close();
  355. }
  356. private void Disconnect()
  357. {
  358. try
  359. {
  360. if(oppManager1.NetworkStream !=null)
  361. oppManager1.Disconnect();
  362. }
  363. catch (Exception ex)
  364. {
  365. btnConnect.Enabled = true;
  366. cmbServices.Enabled = true;
  367. MessageBox.Show(ex.Message, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  368. }
  369. try
  370. {
  371. if (OPPService != null)
  372. OPPService.Disconnect();
  373. }
  374. catch (Exception ex)
  375. {
  376. btnConnect.Enabled = true;
  377. cmbServices.Enabled = true;
  378. MessageBox.Show(ex.Message, "Object Push Profile", MessageBoxButtons.OK, MessageBoxIcon.Error);
  379. }
  380. }
  381. private void cmbDevice_SelectedIndexChanged(object sender, EventArgs e)
  382. {
  383. this.Cursor = Cursors.WaitCursor;
  384. Disconnect();
  385. cmbServices.Items.Clear();
  386. cmbServices.Text = "";
  387. cmbServices.Enabled = true;
  388. btnConnect.Enabled = false;
  389. btnOperation.Enabled = false;
  390. this.Cursor = Cursors.Default;
  391. }
  392. }
  393. }