/**'
         * Will be run in a separate thread and will handle reading and writing to the server. Clicking Join will start this thread.
         */
        private void StartNetworkManager()
        {
            //CONNECT TO SERVER
            tcpClient = new TcpClient(serverIP.Text, Int32.Parse(serverPort.Text));
            //GET IOSTREAM
            ioStream = tcpClient.GetStream();

            //SEND REGISTER REQUEST
            SMERequest smeRequest = new SMERequest("SME/TCP-1.0", "REGISTER", 700, clientID.Text);
            string     request    = JsonConvert.SerializeObject(smeRequest, Formatting.Indented);

            Console.WriteLine(request);
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(request);
            ioStream.Write(data, 0, data.Length);
            ioStream.Flush();
            //GET RESPONSE AND SESSION ID
            var           _data    = new byte[256];
            StringBuilder response = new StringBuilder();

            do
            {
                var numBytesRead = ioStream.Read(_data, 0, _data.Length);
                response.AppendFormat("{0}", Encoding.ASCII.GetString(_data, 0, numBytesRead));
            } while (ioStream.DataAvailable);
            string fullMessage = response.ToString();
            //IN CASE OF DATA IS LONGER THAN DATA LENGTH
            // String to store the response ASCII representation.
            JObject json = JObject.Parse(fullMessage);

            session = (string)json["session"];
            name    = clientID.Text;
        }
コード例 #2
0
        //SENDS SELLORDER REQUEST
        public void sellOrder(string company, int size, double price)
        {
            SMERequest smeRequest = new SMERequest("SME/TCP-1.0", "SELLORDER", 700, clientID, session, company, size, price);
            string     request    = JsonConvert.SerializeObject(smeRequest, Formatting.Indented);

            Console.WriteLine(request);
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(request);
            ioStream.Write(data, 0, data.Length);
        }
        private void stopTradingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //SEND DATA REQUEST
            SMERequest smeRequest = new SMERequest("SME/TCP-1.0", "UNREGISTER", 700, name, session);
            string     request    = JsonConvert.SerializeObject(smeRequest, Formatting.Indented);

            Console.WriteLine(request);
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(request);
            ioStream.Write(data, 0, data.Length);
            ioStream.Flush();
            this.Close();
        }
コード例 #4
0
        //WAITING FOR NOTIFY REQUEST FROM SERVER IN WHICH CASE IT WILL REQUEST DATA AND UPDATE 'StockCompanies'
        public void waitForNotify()
        {
            while (connection.Connected)
            {
                //GET RESPONSE AND UPDATE DATA IF NOTIFY
                var           _data    = new byte[256];
                StringBuilder response = new StringBuilder();
                do
                {
                    var numBytesRead = ioStream.Read(_data, 0, _data.Length);
                    response.AppendFormat("{0}", Encoding.ASCII.GetString(_data, 0, numBytesRead));
                } while (ioStream.DataAvailable);
                string fullMessage = response.ToString();
                //IN CASE OF DATA IS LONGER THAN DATA LENGTH
                // String to store the response ASCII representation.
                JObject json   = JObject.Parse(fullMessage);
                JToken  header = json["header"];
                string  verb   = (string)header["verb"];
                if (verb == "NOTIFY")
                {
                    //SEND DATA REQUEST
                    SMERequest smeRequest = new SMERequest("SME/TCP-1.0", "LIST COMPANIES", 700, clientID, session);
                    string     request    = JsonConvert.SerializeObject(smeRequest, Formatting.Indented);
                    Console.WriteLine(request);
                    Byte[] data = System.Text.Encoding.ASCII.GetBytes(request);
                    ioStream.Write(data, 0, data.Length);
                    ioStream.Flush();
                    //GET RESPONSE AND UPDATE DATA
                    _data    = new byte[256];
                    response = new StringBuilder();
                    do
                    {
                        var numBytesRead = ioStream.Read(_data, 0, _data.Length);
                        response.AppendFormat("{0}", Encoding.ASCII.GetString(_data, 0, numBytesRead));
                    } while (ioStream.DataAvailable);
                    fullMessage = response.ToString();
                    //IN CASE OF DATA IS LONGER THAN DATA LENGTH
                    // String to store the response ASCII representation.
                    StockCompanies = new List <Company>();
                    json           = JObject.Parse(fullMessage);
                    JObject Data      = JObject.Parse((string)json["Data"]);
                    JArray  companies = (JArray)Data["stockCompanies"];

                    foreach (JObject company in companies)
                    {
                        Company newCompany = addCompany((string)company["symbol"], (string)company["name"], (double)(company["openPrice"]));
                        newCompany.lastSale = (double)company["currentPrice"];
                        JArray buyOrders    = (JArray)company["buyOrders"];
                        JArray sellOrders   = (JArray)company["sellOrders"];
                        JArray transactions = (JArray)company["transactions"];
                        foreach (JToken order in buyOrders)
                        {
                            newCompany.BuyOrders.Add(new BuyOrder((double)order["price"], (int)order["size"]));
                        }
                        foreach (JToken order in sellOrders)
                        {
                            newCompany.SellOrders.Add(new SellOrder((double)order["price"], (int)order["size"]));
                        }
                        foreach (JToken order in transactions)
                        {
                            newCompany.Transactions.Add(new SellOrder((double)order["price"], (int)order["size"]));
                        }
                    }

                    Notify();
                }
            }
        }
        private void beginTradingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            StartNetworkManager();
            //new Thread(new ThreadStart(StartNetworkManager)).Start();
            // Create three stocks and add them to the market
            Subject = new RealTimedata(tcpClient, clientID.Text, session);

            // In this lab assignment we will add three companies only using the following format:
            // Company symbol , Company name , Open price

            //SEND DATA REQUEST
            SMERequest smeRequest = new SMERequest("SME/TCP-1.0", "LIST COMPANIES", 700, name, session);
            string     request    = JsonConvert.SerializeObject(smeRequest, Formatting.Indented);

            Console.WriteLine(request);
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(request);
            ioStream.Write(data, 0, data.Length);
            ioStream.Flush();
            //GET RESPONSE AND UPDATE DATA
            var           _data    = new byte[256];
            StringBuilder response = new StringBuilder();

            do
            {
                var numBytesRead = ioStream.Read(_data, 0, _data.Length);
                response.AppendFormat("{0}", Encoding.ASCII.GetString(_data, 0, numBytesRead));
            } while (ioStream.DataAvailable);
            string fullMessage = response.ToString();
            //IN CASE OF DATA IS LONGER THAN DATA LENGTH
            // String to store the response ASCII representation.
            JObject json      = JObject.Parse(fullMessage);
            JObject Data      = JObject.Parse((string)json["Data"]);
            JArray  companies = (JArray)Data["stockCompanies"];

            foreach (JToken company in companies)
            {
                Company newCompany = Subject.addCompany((string)company["symbol"], (string)company["name"], (double)(company["openPrice"]));
                newCompany.lastSale = (double)company["currentPrice"];
                JArray buyOrders    = (JArray)company["buyOrders"];
                JArray sellOrders   = (JArray)company["sellOrders"];
                JArray transactions = (JArray)company["transactions"];
                foreach (JToken order in buyOrders)
                {
                    newCompany.BuyOrders.Add(new BuyOrder((double)order["price"], (int)order["size"]));
                }
                foreach (JToken order in sellOrders)
                {
                    newCompany.SellOrders.Add(new SellOrder((double)order["price"], (int)order["size"]));
                }
                foreach (JToken order in transactions)
                {
                    newCompany.Transactions.Add(new SellOrder((double)order["price"], (int)order["size"]));
                }
            }

            this.watchToolStripMenuItem.Visible        = true;
            this.ordersToolStripMenuItem.Visible       = true;
            this.beginTradingToolStripMenuItem.Enabled = false;
            this.marketToolStripMenuItem.Text          = "&Market <<Open>>";

            MarketDepthSubMenu(this.marketByOrderToolStripMenuItem1);
            MarketDepthSubMenu(this.marketByPriceToolStripMenuItem1);
        }