public List <candleTick> getHistoricalPrice(List <string> securities, List <string> tinterfaces, string granularity, string side, int number)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getHistoricalPrice = new getHistoricalPriceRequest(user, token, securities, tinterfaces, granularity, side, number);
        Object res = sendRequest(hftrequest, "/getHistoricalPrice", false, null);

        return((List <candleTick>)res);
    }
    public List <accountTick> getAccount()
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getAccount = new getAccountRequest(user, token);
        Object res = sendRequest(hftrequest, "/getAccount", false, null);

        return((List <accountTick>)res);
    }
    public string getOrderBegin(List <string> securities, List <string> tinterfaces, List <string> types, int interval, AdharaHFTListener listener)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getOrder = new getOrderRequest(user, token, securities, tinterfaces, types, interval);
        Object res = sendRequest(hftrequest, "/getOrder", true, listener);

        return((string)res);
    }
    public List <cancelTick> cancelOrder(List <string> orders)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.cancelOrder = new cancelOrderRequest(user, token, orders);
        Object res = sendRequest(hftrequest, "/cancelOrder", false, null);

        return((List <cancelTick>)res);
    }
    public string getPositionBegin(List <string> assets, List <string> securities, List <string> accounts, int interval, AdharaHFTListener listener)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getPosition = new getPositionRequest(user, token, assets, securities, accounts, interval);
        Object res = sendRequest(hftrequest, "/getPosition", true, listener);

        return((string)res);
    }
    public string getPriceBegin(List <string> securities, List <string> tinterfaces, string granularity, int levels, int interval, AdharaHFTListener listener)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getPrice = new getPriceRequest(user, token, securities, tinterfaces, granularity, levels, interval);
        Object res = sendRequest(hftrequest, "/getPrice", true, listener);

        return((string)res);
    }
    public positionTick getPosition(List <string> assets, List <string> securities, List <string> accounts)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getPosition = new getPositionRequest(user, token, assets, securities, accounts, 0);
        Object res = sendRequest(hftrequest, "/getPosition", false, null);

        return((positionTick)res);
    }
    public List <tinterfaceTick> getInterface()
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getInterface = new getInterfaceRequest(user, token);
        Object res = sendRequest(hftrequest, "/getInterface", false, null);

        return((List <tinterfaceTick>)res);
    }
    public List <priceTick> getPrice(List <string> securities, List <string> tinterfaces, string granularity, int levels)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getPrice = new getPriceRequest(user, token, securities, tinterfaces, granularity, levels, 0);
        Object res = sendRequest(hftrequest, "/getPrice", false, null);

        return((List <priceTick>)res);
    }
    public List <orderTick> getOrder(List <string> securities, List <string> tinterfaces, List <string> types)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.getOrder = new getOrderRequest(user, token, securities, tinterfaces, types, 0);
        Object res = sendRequest(hftrequest, "/getOrder", false, null);

        return((List <orderTick>)res);
    }
    public List <orderRequest> setOrder(List <orderRequest> orders)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.setOrder = new setOrderRequest(user, token, orders);
        Object res = sendRequest(hftrequest, "/setOrder", false, null);

        return((List <orderRequest>)res);
    }
    public List <modifyTick> modifyOrder(List <modOrder> orders)
    {
        hftRequest hftrequest = new hftRequest();

        hftrequest.modifyOrder = new modifyOrderRequest(user, token, orders);
        Object res = sendRequest(hftrequest, "/modifyOrder", false, null);

        return((List <modifyTick>)res);;
    }
 public List<candleTick> getHistoricalPrice(List<string> securities, List<string> tinterfaces, string granularity, string side, int number)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getHistoricalPrice = new getHistoricalPriceRequest(user, token, securities, tinterfaces, granularity, side, number);
     Object res = sendRequest(hftrequest, "/getHistoricalPrice", false, null);
     return (List<candleTick>) res;
 }
 public List<orderTick> getOrder(List<string> securities, List<string> tinterfaces, List<string> types)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getOrder = new getOrderRequest(user, token, securities, tinterfaces, types, 0);
     Object res = sendRequest(hftrequest, "/getOrder", false, null);
     return (List<orderTick>)res;
 }
 public List<modifyTick> modifyOrder(List<modOrder> orders)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.modifyOrder = new modifyOrderRequest(user, token, orders);
     Object res = sendRequest(hftrequest, "/modifyOrder", false, null);
     return (List<modifyTick>)res; ;
 }
 public string getPriceBegin(List<string> securities, List<string> tinterfaces, string granularity, int levels, int interval, ArthikaHFTListener listener)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getPrice = new getPriceRequest(user, token, securities, tinterfaces, granularity, levels, interval);
     Object res = sendRequest(hftrequest, "/getPrice", true, listener);
     return (string) res;
 }
 public List<priceTick> getPrice(List<string> securities, List<string> tinterfaces, string granularity, int levels)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getPrice = new getPriceRequest(user, token, securities, tinterfaces, granularity, levels, 0);
     Object res = sendRequest(hftrequest, "/getPrice", false, null);
     return (List<priceTick>) res;
 }
 public string getPositionBegin(List<string> assets, List<string> securities, List<string> accounts, int interval, ArthikaHFTListener listener)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getPosition = new getPositionRequest(user, token, assets, securities, accounts, interval);
     Object res = sendRequest(hftrequest, "/getPosition", true, listener);
     return (string)res;
 }
 public positionTick getPosition(List<string> assets, List<string> securities, List<string> accounts)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getPosition = new getPositionRequest(user, token, assets, securities, accounts, 0);
     Object res = sendRequest(hftrequest, "/getPosition", false, null);
     return (positionTick) res;
 }
 public string getOrderBegin(List<string> securities, List<string> tinterfaces, List<string> types, int interval, ArthikaHFTListener listener)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getOrder = new getOrderRequest(user, token, securities, tinterfaces, types, interval);
     Object res = sendRequest(hftrequest, "/getOrder", true, listener);
     return (string)res;
 }
 public List<orderRequest> setOrder(List<orderRequest> orders)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.setOrder = new setOrderRequest(user, token, orders);
     Object res = sendRequest(hftrequest, "/setOrder", false, null);
     return (List<orderRequest>) res;
 }
 public List<tinterfaceTick> getInterface()
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getInterface = new getInterfaceRequest(user, token);
     Object res = sendRequest(hftrequest, "/getInterface", false, null);
     return (List<tinterfaceTick>) res;
 }
    private Object sendRequest(hftRequest hftrequest, string urlpath, bool stream, AdharaHFTListener listener)
    {
        if (token == null)
        {
            return(null);
        }

        int currentRequestId;

        lock (Lock)
        {
            currentRequestId = requestId;
            requestId++;
        }

        HttpWebRequest httpWebRequest;

        if (stream)
        {
            httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + request_port + url_stream + urlpath);
        }
        else
        {
            httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + request_port + url_polling + urlpath);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();

        serializer.RegisterConverters(new JavaScriptConverter[] { new NullPropertiesConverter() });
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method      = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }


        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            streamWriter.WriteLine(serializer.Serialize(hftrequest));
            Console.WriteLine(serializer.Serialize(hftrequest));
        }

        HttpWebResponse httpResponse;

        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return(null);
        }
        StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream());

        if (stream)
        {
            Thread t = new Thread(() => handleResponse(streamReader, true, listener));
            t.Name = currentRequestId.ToString();
            streamReaderMap.Add(t, streamReader);
            t.Start();
            Console.WriteLine("Running " + t.Name);
            return(t.Name);
        }
        else
        {
            Object res = handleResponse(streamReader, false, null);
            streamReader.Close();
            return(res);
        }
    }
    public bool doAuthentication()
    {
        HttpWebRequest httpWebRequest;
        JavaScriptSerializer serializer;
        HttpWebResponse httpResponse;

        // download certificate
        certificate1 = null;
        if (ssl)
        {
            using (WebClient client = new WebClient())
            {
                client.DownloadFile(ssl_cert, "ssl.cert");
            }
            certificate1 = new X509Certificate("ssl.cert");
        }

        // get challenge
        httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + authentication_port + url_challenge);
        serializer = new JavaScriptSerializer();
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }
        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            hftRequest request = new hftRequest();
            request.getAuthorizationChallenge = new getAuthorizationChallengeRequest(user);
            streamWriter.WriteLine(serializer.Serialize(request));
            //Console.WriteLine(serializer.Serialize(request));
        }
        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return false;
        }
        using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            try
            {
                challenge = (string)handleResponse(streamReader, false, null);
            }
            catch (SocketException ex) { Console.WriteLine(ex.Message); }
            catch (IOException ioex) { Console.WriteLine(ioex.Message); }
        }

        // create challenge response
        string res = challenge;
        char[] passwordArray = password.ToCharArray();
        foreach (byte passwordLetter in passwordArray)
        {
            int value = Convert.ToInt32(passwordLetter);
            string hexOutput = String.Format("{0:X}", value);
            res = res + hexOutput;
        }
        int NumberChars = res.Length;
        byte[] bytes = new byte[NumberChars / 2];
        for (int i = 0; i < NumberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(res.Substring(i, 2), 16);
        }
        SHA1 sha = new SHA1CryptoServiceProvider();
        byte[] tokenArray = sha.ComputeHash(bytes);
        string challengeresp = BitConverter.ToString(tokenArray);
        challengeresp = challengeresp.Replace("-", "");

        // get token with challenge response
        httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + authentication_port + url_token);
        serializer = new JavaScriptSerializer();
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }
        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            hftRequest request = new hftRequest();
            request.getAuthorizationToken = new getAuthorizationTokenRequest(user, challengeresp);
            streamWriter.WriteLine(serializer.Serialize(request));
            //Console.WriteLine(serializer.Serialize(request));
        }
        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex){
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return false;
        }
        using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            try
            {
                token = (string)handleResponse(streamReader, false, null);
                return true;
            }
            catch (SocketException ex) { Console.WriteLine(ex.Message); return false; }
            catch (IOException ioex) { Console.WriteLine(ioex.Message); return false; }
        }
    }
    private Object sendRequest(hftRequest hftrequest, string urlpath, bool stream, ArthikaHFTListener listener)
    {
        if (token == null)
        {
            return null;
        }

        int currentRequestId;
        lock (Lock)
        {
            currentRequestId = requestId;
            requestId++;
        }

        HttpWebRequest httpWebRequest;
        if (stream)
        {
            httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + request_port + url_stream + urlpath);
        }
        else
        {
            httpWebRequest = (HttpWebRequest)WebRequest.Create(domain + ":" + request_port + url_polling + urlpath);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RegisterConverters(new JavaScriptConverter[] { new NullPropertiesConverter() });
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            streamWriter.WriteLine(serializer.Serialize(hftrequest));
            Console.WriteLine(serializer.Serialize(hftrequest));
        }

        HttpWebResponse httpResponse;
        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return null;
        }
        StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream());
        if (stream)
        {
            Thread t = new Thread(() => handleResponse(streamReader, true, listener));
            t.Name = currentRequestId.ToString();
            streamReaderMap.Add(t, streamReader);
            t.Start();
            Console.WriteLine("Running " + t.Name);
            return t.Name;
        }
        else
        {
            Object res = handleResponse(streamReader, false, null);
            streamReader.Close();
            return res;
        }
    }
 public List<accountTick> getAccount()
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.getAccount = new getAccountRequest(user, token);
     Object res = sendRequest(hftrequest, "/getAccount", false, null);
     return (List<accountTick>) res;
 }
    public bool doAuthentication()
    {
        HttpWebRequest       httpWebRequest;
        JavaScriptSerializer serializer;
        HttpWebResponse      httpResponse;

        // download certificate
        certificate1 = null;
        if (ssl)
        {
            using (WebClient client = new WebClient())
            {
                client.DownloadFile(ssl_cert, "ssl.cert");
            }
            certificate1 = new X509Certificate("ssl.cert");
        }

        // get challenge
        httpWebRequest             = (HttpWebRequest)WebRequest.Create(domain + ":" + authentication_port + url_challenge);
        serializer                 = new JavaScriptSerializer();
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method      = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }
        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            hftRequest request = new hftRequest();
            request.getAuthorizationChallenge = new getAuthorizationChallengeRequest(user);
            streamWriter.WriteLine(serializer.Serialize(request));
            //Console.WriteLine(serializer.Serialize(request));
        }
        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return(false);
        }
        using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            try
            {
                challenge = (string)handleResponse(streamReader, false, null);
            }
            catch (SocketException ex) { Console.WriteLine(ex.Message); }
            catch (IOException ioex) { Console.WriteLine(ioex.Message); }
        }

        // create challenge response
        string res = challenge;

        char[] passwordArray = password.ToCharArray();
        foreach (byte passwordLetter in passwordArray)
        {
            int    value     = Convert.ToInt32(passwordLetter);
            string hexOutput = String.Format("{0:X}", value);
            res = res + hexOutput;
        }
        int NumberChars = res.Length;

        byte[] bytes = new byte[NumberChars / 2];
        for (int i = 0; i < NumberChars; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(res.Substring(i, 2), 16);
        }
        SHA1 sha = new SHA1CryptoServiceProvider();

        byte[] tokenArray    = sha.ComputeHash(bytes);
        string challengeresp = BitConverter.ToString(tokenArray);

        challengeresp = challengeresp.Replace("-", "");

        // get token with challenge response
        httpWebRequest             = (HttpWebRequest)WebRequest.Create(domain + ":" + authentication_port + url_token);
        serializer                 = new JavaScriptSerializer();
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method      = "POST";
        if (ssl)
        {
            httpWebRequest.ClientCertificates.Add(certificate1);
        }
        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            hftRequest request = new hftRequest();
            request.getAuthorizationToken = new getAuthorizationTokenRequest(user, challengeresp);
            streamWriter.WriteLine(serializer.Serialize(request));
            //Console.WriteLine(serializer.Serialize(request));
        }
        try
        {
            httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        }
        catch (Exception ex) {
            Console.WriteLine("Unexpected response status: " + ex.Message);
            return(false);
        }
        using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            try
            {
                token = (string)handleResponse(streamReader, false, null);
                return(true);
            }
            catch (SocketException ex) { Console.WriteLine(ex.Message); return(false); }
            catch (IOException ioex) { Console.WriteLine(ioex.Message); return(false); }
        }
    }
 public List<cancelTick> cancelOrder(List<string> orders)
 {
     hftRequest hftrequest = new hftRequest();
     hftrequest.cancelOrder = new cancelOrderRequest(user, token, orders);
     Object res = sendRequest(hftrequest, "/cancelOrder", false, null);
     return (List<cancelTick>) res;
 }