예제 #1
0
        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";
        }
예제 #2
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;
            }
        }
예제 #3
0
        /// <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++;
            }
        }
예제 #4
0
        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();
                }
            }
        }
예제 #5
0
        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;
        }
예제 #6
0
        /// <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");
            }
        }
예제 #7
0
        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);
            }
        }