public bool SendRequest(int jobKeyCode, GenevaReportArgs args) { try { string msg = String.Format("-r {0} -p {1} -s {2} -e {3} -k {4} -l {5}\0", args.report, args.portfolio, args.pstart, args.pend, args.kdate, args.pkdate); Send(jobKeyCode, msg); } catch (Exception ex) { log.ErrorFormat("Not connected. {0}", ex.Message); return false; } return true; }
public String Send(int jobKeyCode, string s) { GenevaReportArgs gra = new GenevaReportArgs(s); //for validation only! TcpClient clientSocket = new TcpClient(); StringBuilder sbResponse = null; byte[] responseBuffer = null; try { Thread.Sleep(1000); clientSocket.Connect(bamSvcMgrHost, bamSvcMgrHostPort); log.Info(jobKeyCode, "Connected..."); byte[] requestBuffer = Encoding.ASCII.GetBytes(gra.ToString()); NetworkStream stream = clientSocket.GetStream(); stream.ReadTimeout = timeout; stream.Write(requestBuffer, 0, requestBuffer.Length); stream.Flush(); log.InfoFormat(jobKeyCode, "Sent: {0} [{1} bytes]", gra, requestBuffer.Length); if (stream.CanRead) { int numberOfBytesToRead = 0; int numberOfBytesRead = 0; if (WaitForStream(jobKeyCode, stream, timeout)) { try { string respNumBytes = ""; responseBuffer = new byte[1000]; numberOfBytesRead = stream.Read(responseBuffer, 0, responseBuffer.Length); respNumBytes = Encoding.ASCII.GetString(responseBuffer, 0, numberOfBytesRead); if( !Int32.TryParse(respNumBytes, out numberOfBytesToRead) ) throw new ApplicationException("Unable to determine size of response buffer."); } catch (Exception ex) { log.Error(jobKeyCode, ex); return String.Empty; } //acknowledge that we're ready to receive Thread.Sleep(3000); requestBuffer = Encoding.ASCII.GetBytes(String.Format("{0}\n", "ACK")); stream.Write(requestBuffer, 0, 4); stream.Flush(); log.InfoFormat(jobKeyCode, "Prepared to receive report [{0} bytes]", numberOfBytesToRead); } else throw new ApplicationException(String.Format("Timeout connecting to BamGeneva Service Manager Interface on {0}:{1}", bamSvcMgrHost, bamSvcMgrHostPort)); if (numberOfBytesToRead > 0) { sbResponse = new StringBuilder(numberOfBytesToRead); responseBuffer = new byte[200000]; if (WaitForStream(jobKeyCode, stream, timeout)) { try { log.InfoFormat(jobKeyCode, "Receiving report..."); numberOfBytesRead = 0; while (numberOfBytesRead < numberOfBytesToRead) { int bytecount = stream.Read(responseBuffer, 0, Math.Min(numberOfBytesToRead - numberOfBytesRead, responseBuffer.Length)); sbResponse.Append(Encoding.ASCII.GetString(responseBuffer, 0, Math.Min(numberOfBytesToRead - bytecount, bytecount))); numberOfBytesRead += bytecount; log.DebugFormat(jobKeyCode, "Received {0} of {1} bytes...", numberOfBytesRead, numberOfBytesToRead); } } catch (Exception ex) { log.Error(jobKeyCode, ex); } } else throw new ApplicationException(String.Format("Timeout connecting to BamGeneva Service Manager Interface on {0}:{1}", bamSvcMgrHost, bamSvcMgrHostPort)); } log.InfoFormat(jobKeyCode, "Received {0} bytes from service.", numberOfBytesRead); } } catch (Exception ex) { log.ErrorFormat(jobKeyCode, "Not connected. [{0}]", ex.Message); return String.Empty; } if (sbResponse == null) return String.Empty; return sbResponse.ToString(); }