Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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();
        }