Advertisement
Guest User

Middleware code

a guest
Nov 22nd, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Net;
  11. using System.Net.Sockets;
  12.  
  13. namespace Bind_Server
  14. {
  15. public partial class Form1 : Form
  16. {
  17. private Socket server;
  18. //private Socket client;
  19. private byte[] data = new byte[1024];
  20. private int ConnectionNo;
  21. public Form1()
  22. {
  23. InitializeComponent();
  24. Control.CheckForIllegalCrossThreadCalls = false;
  25. }
  26.  
  27. private void btnStart_Click(object sender, EventArgs e)
  28. {
  29. server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  30. int port;
  31. port = int.Parse(txtPort.Text);
  32. IPEndPoint localEP = new IPEndPoint(0, port);
  33. server.Bind(localEP);
  34. server.Listen(0);
  35. server.BeginAccept(new AsyncCallback(OnConnected), null);
  36. btnStart.Enabled = false;
  37. txtPort.Enabled = false;
  38. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Bind Server: Online");
  39. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client .....");
  40. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  41. btnConnect1.PerformClick();
  42. btnConnect2.PerformClick();
  43. }
  44.  
  45. void OnConnected(IAsyncResult result)
  46. {
  47. Socket client = server.EndAccept(result);
  48. server.BeginAccept(new AsyncCallback(OnConnected), null);
  49. try
  50. {
  51. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Connected to : " + client.RemoteEndPoint);
  52. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client .....");
  53. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  54. byte[] message = Encoding.ASCII.GetBytes("Welcome to my server");
  55. client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
  56. ConnectionNo++;
  57. txtConNo.Text = ConnectionNo.ToString();
  58. }
  59. catch (SocketException)
  60. {
  61. CloseClient(client);
  62. }
  63. }
  64.  
  65. void OnDataSent(IAsyncResult result)
  66. {
  67. Socket client = (Socket)result.AsyncState;
  68. try
  69. {
  70. int sent = client.EndSend(result);
  71. client.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), client);
  72. }
  73. catch (SocketException)
  74. {
  75.  
  76. CloseClient(client);
  77. }
  78. }
  79.  
  80. void OnDataReceived(IAsyncResult result)
  81. {
  82. Socket client = (Socket)result.AsyncState;
  83. try
  84. {
  85. int receive = client.EndReceive(result);
  86. if (receive == 0)
  87. {
  88. CloseClient(client);
  89. return;
  90. }
  91. else
  92. {
  93. byte[] message;
  94. if (server1State == false && server2State == false)
  95. {
  96. try
  97. {
  98. message = Encoding.ASCII.GetBytes("No Server Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
  99. client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
  100. }
  101. catch
  102. {
  103. CloseClient(client);
  104. }
  105. }
  106. if (server1State == true) // If server one is connected
  107. {
  108. try
  109. {
  110. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Sending message to server 1: '" + Encoding.ASCII.GetString(data, 0, receive) + "', from client: " + client.RemoteEndPoint);
  111. message = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(data, 0, receive));
  112. serverLink1.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnServerDataSent1), client);
  113. }
  114. catch
  115. {
  116. CloseConnection1();
  117. try
  118. {
  119. message = Encoding.ASCII.GetBytes("Server 1 Failed to Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
  120. client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
  121. }
  122. catch
  123. {
  124. CloseClient(client);
  125. }
  126. }
  127. }
  128.  
  129.  
  130. if (server2State == true) // if server two is connected
  131. {
  132. try
  133. {
  134. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Sending message to server 2: '" + Encoding.ASCII.GetString(data, 0, receive) + "', from client: " + client.RemoteEndPoint);
  135. message = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(data, 0, receive));
  136. serverLink2.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnServerDataSent2), client);
  137. }
  138. catch
  139. {
  140. CloseConnection1();
  141. try
  142. {
  143. message = Encoding.ASCII.GetBytes("Server 2 Failed to Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
  144. client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
  145. }
  146. catch
  147. {
  148. CloseClient(client);
  149. }
  150. }
  151. }
  152. }
  153. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  154. }
  155. catch (SocketException)
  156. {
  157. CloseClient(client);
  158. }
  159.  
  160. }
  161.  
  162. public void CloseClient(Socket client)
  163. {
  164. try
  165. {
  166. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Client disconnected : " + client.RemoteEndPoint);
  167. }
  168. catch
  169. {
  170. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Client disconnected : Lost connection");
  171. }
  172. client.Close();
  173. server.BeginAccept(new AsyncCallback(OnConnected), null);
  174. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client ...");
  175. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  176. ConnectionNo--;
  177. txtConNo.Text = ConnectionNo.ToString();
  178. }
  179.  
  180. private void btnExit_Click(object sender, EventArgs e)
  181. {
  182. Application.Exit();
  183. }
  184.  
  185.  
  186. // Server Connect Section //
  187.  
  188. private Socket serverLink1;
  189. private Socket serverLink2;
  190. private byte[] serverData1 = new byte[1024];
  191. private byte[] serverData2 = new byte[1024];
  192. private bool server1State;
  193. private bool server2State;
  194.  
  195. private void btnConnect1_Click(object sender, EventArgs e)
  196. {
  197. try
  198. {
  199. btnConnect1.Enabled = false;
  200. btnDisconnect1.Enabled = true;
  201. txtPort1.Enabled = false;
  202. txtIP.Enabled = false;
  203. txtStatus2.Text = "Connecting to Server...";
  204.  
  205. serverLink1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  206. int port;
  207. port = int.Parse(txtPort1.Text);
  208. IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(txtIP.Text), port);
  209. serverLink1.BeginConnect(remoteEP, new AsyncCallback(OnServerConnected1), null);
  210. }
  211. catch
  212. {
  213. CloseConnection1();
  214. }
  215. }
  216.  
  217. private void btnConnect2_Click(object sender, EventArgs e)
  218. {
  219. try
  220. {
  221. btnConnect2.Enabled = false;
  222. btnDisconnect2.Enabled = true;
  223. txtPort2.Enabled = false;
  224. txtIP1.Enabled = false;
  225. txtStatus3.Text = "Connecting to Server...";
  226.  
  227. serverLink2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  228. int port;
  229. port = int.Parse(txtPort2.Text);
  230. IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(txtIP1.Text), port);
  231. serverLink2.BeginConnect(remoteEP, new AsyncCallback(OnServerConnected2), null);
  232. }
  233. catch
  234. {
  235. CloseConnection2();
  236. }
  237. }
  238.  
  239.  
  240. // Server Connection Functions
  241. void OnServerConnected1(IAsyncResult result)
  242. {
  243.  
  244. try
  245. {
  246. //Socket client = (Socket)result.AsyncState;
  247. serverLink1.EndConnect(result);
  248. txtStatus2.Text = "Connected to: " + serverLink1.RemoteEndPoint;
  249. serverLink1.BeginReceive(serverData1, 0, serverData1.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived1), null);
  250. server1State = true;
  251. }
  252. catch
  253. {
  254. CloseConnection1();
  255. }
  256. }
  257.  
  258. void OnServerConnected2(IAsyncResult result)
  259. {
  260.  
  261. try
  262. {
  263. //Socket client = (Socket)result.AsyncState;
  264. serverLink2.EndConnect(result);
  265. txtStatus3.Text = "Connected to: " + serverLink2.RemoteEndPoint;
  266. serverLink2.BeginReceive(serverData2, 0, serverData2.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived2), null);
  267. server2State = true;
  268. }
  269. catch
  270. {
  271. CloseConnection2();
  272. }
  273. }
  274.  
  275.  
  276. // Server 1 Send & Receive
  277. void OnServerDataReceived1(IAsyncResult result)
  278. {
  279. try
  280. {
  281. int receive = serverLink1.EndReceive(result);
  282. string message = Encoding.ASCII.GetString(serverData1, 0, receive);
  283. try
  284. {
  285. Socket clientNode = (Socket)result.AsyncState;
  286. if (lstStatus.SelectedItem.ToString() != DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint)
  287. {
  288. clientNode.BeginSend(serverData1, 0, receive, SocketFlags.None, new AsyncCallback(OnDataSent), clientNode);
  289. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint);
  290. }
  291. else
  292. {
  293. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint + ", server 1 was ignored (too slow)");
  294. }
  295. }
  296. catch
  297. {
  298. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message);
  299. }
  300. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  301.  
  302. }
  303. catch (Exception)
  304. {
  305. CloseConnection1();
  306. }
  307. }
  308.  
  309. void OnServerDataSent1(IAsyncResult result)
  310. {
  311. Socket client = (Socket)result.AsyncState;
  312. try
  313. {
  314. int sent = serverLink1.EndSend(result);
  315. serverLink1.BeginReceive(serverData1, 0, serverData1.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived1), client);
  316. }
  317. catch
  318. {
  319. CloseConnection1();
  320. }
  321. }
  322.  
  323.  
  324.  
  325. // Server 2 Send & Receive
  326. void OnServerDataReceived2(IAsyncResult result)
  327. {
  328. try
  329. {
  330. int receive = serverLink2.EndReceive(result);
  331. string message = Encoding.ASCII.GetString(serverData2, 0, receive);
  332. try
  333. {
  334. Socket clientNode = (Socket)result.AsyncState;
  335. // desync server 2 from server 1 to detect if server one has performed the task.
  336. if (server1State == true)
  337. {
  338. System.Threading.Thread.Sleep(1);
  339. }
  340. if (lstStatus.SelectedItem.ToString() != DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint)
  341. {
  342. clientNode.BeginSend(serverData2, 0, receive, SocketFlags.None, new AsyncCallback(OnDataSent), clientNode);
  343. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint);
  344. }
  345. else
  346. {
  347. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint + ", server 2 was ignored (too slow)");
  348. }
  349. }
  350. catch
  351. {
  352. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message);
  353. }
  354. lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
  355.  
  356. }
  357. catch (Exception)
  358. {
  359. CloseConnection1();
  360. }
  361. }
  362.  
  363. void OnServerDataSent2(IAsyncResult result)
  364. {
  365. Socket client = (Socket)result.AsyncState;
  366. try
  367. {
  368. int sent = serverLink2.EndSend(result);
  369. serverLink2.BeginReceive(serverData2, 0, serverData2.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived2), client);
  370. }
  371. catch
  372. {
  373. CloseConnection2();
  374. }
  375. }
  376.  
  377. // Close server connections 1 & 2 functions
  378. public void CloseConnection1()
  379. {
  380. server1State = false;
  381. serverLink1.Close();
  382. txtStatus2.Text = "Disconnected...";
  383. btnConnect1.Enabled = true;
  384. btnDisconnect1.Enabled = false;
  385. txtPort1.Enabled = true;
  386. txtIP.Enabled = true;
  387. }
  388.  
  389. public void CloseConnection2()
  390. {
  391. server2State = false;
  392. serverLink2.Close();
  393. txtStatus3.Text = "Disconnected...";
  394. btnConnect2.Enabled = true;
  395. btnDisconnect2.Enabled = false;
  396. txtPort2.Enabled = true;
  397. txtIP1.Enabled = true;
  398. }
  399.  
  400. private void btnDisconnect1_Click(object sender, EventArgs e)
  401. {
  402. CloseConnection1();
  403. }
  404.  
  405. private void btnDisconnect2_Click(object sender, EventArgs e)
  406. {
  407. CloseConnection2();
  408. }
  409.  
  410. // Form load variables
  411. private void Form1_Load(object sender, EventArgs e)
  412. {
  413. lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Bind Server: Offline");
  414. server1State = false;
  415. server2State = false;
  416. }
  417.  
  418.  
  419.  
  420. }
  421. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement