private void BMakeOrder_Click(object sender, EventArgs e) { if (Convert.ToInt32(txtQuantity.Text) == 0) { MessageBox.Show("Quantity must be qreater than 0"); return; } if (Convert.ToDouble(txtOrderPrice.Text.Replace('.', ',')) == 0) { MessageBox.Show("Price must be qreater than 0"); return; } TOrder NewOrder = new TOrder(); NewOrder.UserID = _UserID; NewOrder.Side = (TOrderSide)cmbBIDASK.SelectedIndex; NewOrder.Symbol = cmbTradeSmbols.Text; NewOrder.Quantity = Convert.ToInt32(txtQuantity.Text); NewOrder.Price = Convert.ToDouble(txtOrderPrice.Text.Replace('.', ',')); var dataString = JsonConvert.SerializeObject(NewOrder); TMainModel.Sendbuf2Client(_tcpclient, Encoding.ASCII.GetBytes(@"/ADDNEWORDER;" + dataString)); txtQuantity.Text = "0"; txtOrderPrice.Text = "0.0"; }
private void MakeConn(string sip, int port) { IPAddress ip = IPAddress.Parse(sip); try { _tcpclient = new TcpClient(); _tcpclient.Connect(ip, port); _CapStr = $"Connected to {ip}:{port}"; _ActiveConnection = true; _ns = _tcpclient.GetStream(); if (_LastUserID.Length > 0) { TMainModel.SetLastUserID(_LastUserID); } var ReadTask = Task.Run(() => ReceiveData(_tcpclient, _ctsUpdateToken.Token), _ctsUpdateToken.Token); var UPdateDataTask = Task.Run(() => UPDateData(_ctsUpdateToken.Token), _ctsUpdateToken.Token); } catch (SocketException sex) { if (sex.ErrorCode == 10061) { MessageBox.Show($"Cannt connect to target machine, conenction was refused", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); _CapStr = "Network Error: Can not connect to target machine"; _ActiveConnection = false; } } catch (Exception ex) { MessageBox.Show($"{ex.Message }", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); _ActiveConnection = false; } }
/// <summary> /// MainProgram /// </summary> static void Main(string[] args) { int ClientsCount = 0; TcpListener ServerSocket = new TcpListener(IPAddress.Any, 15051); ServerSocket.Start(); Logger.InitLogger(); Logger.Log.Info("Server started"); _ctsUpdateToken = new CancellationTokenSource(); _ctsWorkToken = new CancellationTokenSource(); _GlobalOrderBook.Init(); _TradeHistory.Init(); TMainModel.SetOrderBook(_GlobalOrderBook); TMainModel.SetOrderTradeHistory(_TradeHistory); _DClients = TMainModel.DClientsInit(); while (true) { TcpClient client = ServerSocket.AcceptTcpClient(); string UsGuid = Guid.NewGuid().ToString(); TMainModel.AddCllientToDict(UsGuid, client); _newclientDetected = true; Console.WriteLine($"New client {client.Client.RemoteEndPoint} connected!!"); Logger.Log.Info($"New client {client.Client.RemoteEndPoint} connected!!"); var CheckClient = Task.Run(() => TMainModel.IsConnected(client), _ctsUpdateToken.Token); var HandleClient = Task.Run(() => HandleClients(UsGuid), _ctsWorkToken.Token); ClientsCount++; } }
async void ReceiveData(TcpClient client, CancellationToken cancellationToken) { try { NetworkStream nsw = client.GetStream(); byte[] receivedBytes = new byte[2048]; int byte_count; DateTime lastNWActivity = DateTime.Now; while (client.Connected && !cancellationToken.IsCancellationRequested) { if (GetState(client) == TcpState.Established) { if ((byte_count = nsw.Read(receivedBytes, 0, receivedBytes.Length)) > 0) { TMainModel.readCommand(client, _UserID, receivedBytes, byte_count); } } } nsw.Close(); } catch (SocketException sex) { if (sex.ErrorCode == 10061) { //MessageBox.Show($"Can not connect to target machine, conenction was refused", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); _CapStr = "Network Error: Can not connect to target machine"; _ActiveConnection = false; _tcpclient.Dispose(); _ActiveConnection = false; _GlobalOrderBook.Clear(); _TradeHistory.Clear(); } } catch (Exception ex) { //MessageBox.Show($"{ex.Message }", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); if (!client.Connected) { _CapStr = $"No connection"; _ActiveConnection = false; _tcpclient.Dispose(); _GlobalOrderBook.Clear(); _TradeHistory.Clear(); } } }
private void fClient_Load(object sender, EventArgs e) { if (File.Exists("_lastguid")) { _LastUserID = File.ReadAllText("_lastguid"); } TMainModel.OBInit(); TMainModel.TRHInit(); TMainModel.SetOrderBook(_GlobalOrderBook); TMainModel.SetOrderTradeHistory(_TradeHistory); _GlobalOrderBook = TMainModel.GetOrderBook(); _TradeHistory = TMainModel.GetTradeHistory(); dgvOB.AutoGenerateColumns = false; dgvTradeHistory.AutoGenerateColumns = false; dgvMyOrders.AutoGenerateColumns = false; }
/// <summary> /// Handle with clients /// </summary> /// <param name="cluid">ClientUID</param> public static void HandleClients(string cluid) { try { string clientid = cluid; TcpClient Client; lock (_lock) Client = _DClients[clientid]; if (_newclientDetected) { byte[] buffer = Encoding.ASCII.GetBytes($"/CLIENTNUMBER;{clientid}"); TMainModel.Sendbuf2Client(Client, buffer); } while (true) { NetworkStream stream = Client.GetStream(); byte[] buffer = new byte[2048]; int byte_count = stream.Read(buffer, 0, buffer.Length); if (byte_count == 0) { break; } TMainModel.readCommand(Client, clientid, buffer, byte_count); } Console.WriteLine($"Client {Client.Client.RemoteEndPoint} was disconnected!!"); Logger.Log.Info($"Client {Client.Client.RemoteEndPoint} was disconnected!!"); TMainModel.RemoveClientFromDict(clientid); Client.Client.Shutdown(SocketShutdown.Both); Client.Close(); } catch (Exception ex) { TMainModel.ErrorCatcher(ex, "HandleClients"); } }
private async void UPDateData(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { Invoke((MethodInvoker) delegate { if (_UserID.Length == 0) { _UserID = TMainModel.GetCurrentUserID(); } this.Text = _ActiveConnection ? $"{_CapStr}({_UserID}) ob.CNT:{_GlobalOrderBook?.Orders?.Count}" : "noConnection"; }); _GlobalOrderBook = TMainModel.GetOrderBook(); _TradeHistory = TMainModel.GetTradeHistory(); if (_LastOrderCNTInOB != _GlobalOrderBook.Orders?.Count() && _GlobalOrderBook.Orders != null) { try { var qmyorders = _GlobalOrderBook.Orders .Where(w => (w.Symbol == _CurrSymb && w.UserID == _UserID)) .Select(cl => new { cl.Symbol, cl.Side, cl.Quantity, cl.Price }).ToList(); var grOB = _GlobalOrderBook.Orders .OrderBy(o => o.Price) .Where(w => w.Symbol == _CurrSymb) .GroupBy(l => new { l.Side, l.Price }) .Select(cl => new { Symbol = cl.First().Symbol, MYBIDQTY = cl.First().Side == TOrderSide.Buy & cl.First().UserID == _UserID ? cl.Sum(s => s.Quantity) : 0, MYASKQTY = cl.First().Side == TOrderSide.Sell & cl.First().UserID == _UserID ? cl.Sum(s => s.Quantity) : 0, MKTBIDQTY = cl.First().Side == TOrderSide.Buy & cl.First().UserID != _UserID ? cl.Sum(s => s.Quantity) : 0, MKTASKQTY = cl.First().Side == TOrderSide.Sell & cl.First().UserID != _UserID ? cl.Sum(s => s.Quantity) : 0, Price = cl.First().Price }).ToList(); if (InvokeRequired) { Invoke((MethodInvoker) delegate { dgvOB.DataSource = grOB; dgvOB.Update(); dgvMyOrders.DataSource = qmyorders; dgvMyOrders.Update(); }); } else { dgvOB.DataSource = grOB; dgvOB.Update(); dgvMyOrders.DataSource = qmyorders; dgvMyOrders.Update(); } _LastOrderCNTInOB = _GlobalOrderBook.Orders.Count(); } catch (Exception ex) { MessageBox.Show($"UPDateData.dtMyActiveOrders.{ex.Message }", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } if (_LastTradeCNTInTRH != _TradeHistory.TradesList?.Count() && _TradeHistory.TradesList != null) { try { if (InvokeRequired) { Invoke((MethodInvoker) delegate { dgvTradeHistory.DataSource = _TradeHistory.TradesList.ToList(); dgvTradeHistory.Update(); }); } else { dgvTradeHistory.DataSource = _TradeHistory.TradesList.ToList(); dgvTradeHistory.Update(); } _LastTradeCNTInTRH = _TradeHistory.TradesList.Count(); } catch (Exception ex) { MessageBox.Show($"UPDateData.dtTradeHistory.{ex.Message }", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } catch (Exception ex) { MessageBox.Show($"UPDateData.{ex.Message }", "UPDateData", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } Thread.Sleep(100); } }