/**' * 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; }
//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(); }
//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); }