/// <summary> /// Receive thread to endpoint. /// Should spin until all messages received /// </summary> /// <param name="clientState"> /// clientstate object</param> internal void ClientReceive(ClientState clientState) { try { int receivedMessages = 0; byte[] byteSize = new byte[LENGTH_BITS]; //clientState.serverBuffer = new byte[BUFFER_SIZE]; byte[] serverBuffer = new byte[BUFFER_SIZE]; //byte[] forwardMessage; while (receivedMessages < clientState.messageCount) { //int offset = 0; //int size = 0; int bytesRead = 0; #region savedBad ////clientState.serverSock.ReceiveTimeout = 2000; //////bytesRead = clientState.serverSock.Receive(clientState.serverBuffer, offset, ////// LENGTH_BITS, System.Net.Sockets.SocketFlags.None); ////while (bytesRead < 2) ////{ // bytesRead = clientState.serverSock.Receive(serverBuffer, offset, // LENGTH_BITS, System.Net.Sockets.SocketFlags.None); ////} ////Array.Copy(clientState.serverBuffer, offset, byteSize, 0, LENGTH_BITS); //Array.Copy(serverBuffer, offset, byteSize, 0, LENGTH_BITS); //if (BitConverter.IsLittleEndian) //{ // Array.Reverse(byteSize); //} //size = BitConverter.ToInt16(byteSize, 0); //offset += LENGTH_BITS; //////bytesRead = clientState.serverSock.Receive(clientState.serverBuffer, offset, ////// size, System.Net.Sockets.SocketFlags.None); ////while (bytesRead < size) ////{ // bytesRead = clientState.serverSock.Receive(serverBuffer, offset, // size, System.Net.Sockets.SocketFlags.None); ////} ////clientState.forwardMessage = new byte[bytesRead]; ////clientState.forwardMessage = new byte[bytesRead]; ////Array.Copy(clientState.serverBuffer, offset, clientState.forwardMessage, 0, bytesRead); //byte[] forwardMessage = new byte[bytesRead]; ////Array.Copy(serverBuffer, offset, forwardMessage, 0, bytesRead); //Array.Copy(serverBuffer, 0, forwardMessage, 0, bytesRead); ////clientState.lb.routedMessages.Add(clientState.forwardMessage); //clientState.lb.routedMessages.Add(forwardMessage); #endregion lock (clientState.serverReceiveLock) { bytesRead = clientState.serverSock.Receive(serverBuffer); } byte[] forwardMessage = new byte[bytesRead]; Array.Copy(serverBuffer, forwardMessage, bytesRead); receivedMessages++; lock (clientState.clientSendLock) { clientState.clientSock.Send(forwardMessage); } //Thread routeMsgThread = new Thread(delegate() //{ // RouteMessage(clientState, forwardMessage); //}); //routeMsgThread.Start(); } } catch (Exception e) { e.Message.ToString(); System.Windows.Forms.MessageBox.Show("ClientRun.ClientReceive function\r\n" + e.Message.ToString()); Thread.Sleep(5000); } //routeMsgThread.Join(); //System.Windows.Forms.MessageBox.Show("Received All Messages"); }
//internal void RouteMessage(ClientState clientState, byte[] forwardMessage) /// <summary> /// forwards message from endpoint server to client /// </summary> /// <param name="clientState"> /// ClientState object /// </param> private void RouteMessage(ClientState clientState, byte[] forwardMessage) { try { lock (clientState.clientSendLock) { //clientState.clientSock.Send(clientState.forwardMessage); clientState.clientSock.Send(forwardMessage); //clientState.clientSock.Send(forwardMessage, forwardMessage.Length, System.Net.Sockets.SocketFlags.None); } } catch (Exception e) { e.Message.ToString(); System.Windows.Forms.MessageBox.Show("ClientRun.RouteMessage\r\n" + e.Message.ToString()); } }
/// <summary> /// sets up the clientstate object to prepare /// for send/receive operations from endpoint /// connection /// </summary> /// <param name="sockState"> /// takes a socketState object /// </param> /// <returns> /// socket connected to endpoint server /// </returns> internal System.Net.Sockets.Socket SetClientSocket(ClientState clientState) { //endPointIP = clientState.serverIPAddress1; Connect(clientState); return clientState.serverSock; }
/// <summary> /// Connects to the endpoint /// </summary> /// <param name="clientState"> /// takes a clientstate object and connects it to endpoint /// </param> private void Connect(ClientState clientState) { System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket( System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); try { //sock.Connect(endPointIP, PORT); sock.Connect(clientState.serverIPAddress1, PORT); sock.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Tcp, System.Net.Sockets.SocketOptionName.NoDelay, true); clientState.serverSock = sock; } catch (Exception e) { e.Message.ToString(); System.Windows.Forms.MessageBox.Show("Connect Function \r\n" + e.Message.ToString()); } }
/// <summary> /// sends message to endpoint /// </summary> /// <param name="clientState"> /// ClientState object /// </param> internal void ClientSend(ClientState clientState, byte[] sendMsg) { try { // Send clientState.Processed message to server Thread.Sleep(clientState.pace); // lock and send to the server lock (clientState.serverSendLock) { //clientState.serverSock.Send(clientState.processedMessage); clientState.serverSock.Send(sendMsg, sendMsg.Length, System.Net.Sockets.SocketFlags.None); } clientState.serverSentCounter++; } catch (Exception e) { e.Message.ToString(); //System.Windows.Forms.MessageBox.Show("ClientRun.ClientSend\r\n" + e.Message.ToString()); } }