private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            double width = HalconWPFWindow.Width;

            rectHalcon.Width = (int)width;
            double height = HalconWPFWindow.Height;

            rectHalcon.Height = (int)height;

            hWindow = HalconWPFWindow.HalconWindow;

            if (hWindow == null)
            {
                return;
            }

            Thread thread = new Thread(new ThreadStart(ThreadRun));

            thread.Start();

            unsafe
            {
                enumStatus status = (enumStatus)pclSetup();

                status = (enumStatus)pclDownloadParameter(ref para1, ref para2, ref para3, ref para4);

                txtBoxResult.Text = status.ToString();
            }
        }
Ejemplo n.º 2
0
        public string AddUser(string UserName, string Balance, string jsonInput)
        {
            User       user    = null;
            string     message = string.Empty;
            enumStatus status  = enumStatus.Unknown;
            double     balance = 0.0;

            try
            {
                if (!double.TryParse(Balance, out balance))
                {
                    message = string.Format("Error: Invalid Balance: {0}", Balance);
                }
                if (!string.IsNullOrEmpty(jsonInput))
                {
                    user = new User(jsonInput);
                }
                else
                {
                    user = new User(UserName, balance);
                }

                if (MatchMeDB.Instance.UserTable.ContainsKey(user.UserName) || MatchMeDB.Instance.Users.ContainsKey(user.Id))
                {
                    string existingUser = MatchMeDB.Instance.UserTable[user.UserName].ToString();
                    message = string.Format("Error: duplicate user. Existing User: {0} New User (rejected): {1}", existingUser, user.ToString());
                }
                if (string.IsNullOrEmpty(message))
                {
                    status = MatchMeDB.Instance.AddUser(user);
                    if (status.Equals(enumStatus.UserAdded))
                    {
                        message = string.Format("User Added: {0}", user.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                ServerLog.LogException(ex, string.Format("Add User: {0}", user.ToString()));
                message = ex.Message;
                status  = enumStatus.UserAddFailed;
            }
            var result = new Dictionary <string, string> {
                { "status", status.ToString() },
                { "message", message }
            };

            return(JsonConvert.SerializeObject(result));
        }
Ejemplo n.º 3
0
        public string PlaceAnOrder(string UserName, string UserId, string Symbol, string Volume, string Price, string OrderType, string OrderSide)
        {
            User          user            = null;
            string        message         = string.Empty;
            string        userId          = MatchMeDB.Instance.UserTable[Config.AdminUser].Id;
            enumStatus    status          = enumStatus.Unknown;
            enumSide      orderside       = enumSide.Invalid;
            enumOrderType ordertype       = enumOrderType.Invalid;
            double        price           = 0.0;
            int           volume          = 0;
            bool          exist           = false;
            double        requiredbalance = 0.0;
            double        remainbalance   = 0.0;
            string        symbol          = Symbol.ToUpper();

            try
            {
                Symbol = Symbol.ToUpper();
                if (!int.TryParse(Volume, out volume))
                {
                    message = string.Format("Error: Invalid Volume: {0}", volume);
                    status  = enumStatus.OrderPlaceError;
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && !string.IsNullOrEmpty(symbol))
                {
                    List <Order> companies = MatchMeDB.Instance.OrderTable.ContainsKey(userId) ? MatchMeDB.Instance.OrderTable[userId] : new List <Order>();
                    exist = companies.Where(a => a.Symbol.Equals(symbol)).Count() > 0;
                    if (!exist)
                    {
                        message = string.Format("Error: The Company does not exist {0}", symbol);
                        status  = enumStatus.OrderPlaceError;
                    }
                }
                else
                {
                    message = string.Format("Error: The Company does not exist {0}", symbol);
                    status  = enumStatus.OrderPlaceError;
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && !Enum.TryParse(OrderSide, true, out orderside))
                {
                    message = string.Format("Error: Invalid Order Side: {0}", OrderSide);
                    status  = enumStatus.OrderPlaceError;
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && !Enum.TryParse(OrderType, true, out ordertype))
                {
                    message = string.Format("Error: Invalid Order Type: {0}", OrderType);
                    status  = enumStatus.OrderPlaceError;
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && ordertype.Equals(enumOrderType.Market))
                {
                    price = Exchange.Instance.GetMarketPrice(orderside, symbol, volume);
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && ordertype.Equals(enumOrderType.Limit))
                {
                    if (!double.TryParse(Price, out price))
                    {
                        message = string.Format("Error: Invalid Price: {0}", Price);
                        status  = enumStatus.OrderPlaceError;
                    }
                    if (!status.Equals(enumStatus.OrderPlaceError) && orderside.Equals(enumSide.Sell))
                    {
                        price = (-1) * Math.Abs(price);
                    }
                }

                if (!status.Equals(enumStatus.OrderPlaceError) && !string.IsNullOrEmpty(UserName))
                {
                    MatchMeDB.Instance.UserTable.TryGetValue(UserName, out user);
                    if (user == null)
                    {
                        message = string.Format("Error: Can't retrieve the User from the db via the keys. UserName{0}, UserId{1}", UserName, UserId);
                        status  = enumStatus.OrderPlaceError;
                    }
                }
                if (!status.Equals(enumStatus.OrderPlaceError) && string.IsNullOrEmpty(message) && exist)
                {
                    if (price > 0)
                    {
                        //price larger than zero means that it's a buy limit order or an order with valid market price
                        requiredbalance = price * volume + Config.Commission;
                    }
                    if (requiredbalance > user.Balance)
                    {
                        //check if balance is enough
                        remainbalance = requiredbalance - user.Balance;
                        message       = string.Format("Error: No Enough Balance: Remain balance {0}, Requires {1} to place the order", user.Balance, remainbalance);
                        status        = enumStatus.Rejected;
                    }
                    else
                    {
                        Order newOrder = new Order(symbol, volume, price, user.Id, ordertype, orderside);
                        if (orderside.Equals(enumSide.Sell))
                        {
                            status = Exchange.Instance.PlaceSell(newOrder);
                            if (status.Equals(enumStatus.Rejected))
                            {
                                message = string.Format("Error: Short Sell is not allowed. {0}", newOrder);
                            }
                        }
                        else if (orderside.Equals(enumSide.Buy))
                        {
                            status = Exchange.Instance.PlaceBuy(newOrder);
                        }
                        if (!status.Equals(enumStatus.OrderPlaceError) && string.IsNullOrEmpty(message))
                        {
                            message = "New Order Placed:" + MatchMeDB.Instance.Orders[newOrder.Id];
                            status  = enumStatus.OrderPlaced;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ServerLog.LogException(ex, string.Format("Place Order Failed, User {0}, Symbol {1}", user.ToString(), Symbol));
                message = ex.Message;
                status  = enumStatus.OrderPlaceError;
            }
            var result = new Dictionary <string, string> {
                { "status", status.ToString() }, { "message", message }
            };

            return(JsonConvert.SerializeObject(result));
        }
Ejemplo n.º 4
0
        public string AdjustBalance(string UserName, string UserId, string AdjustAmount)
        {
            User       user    = null;
            string     message = string.Empty;
            enumStatus status  = enumStatus.Unknown;
            double     adjustAmount;

            try
            {
                if (!double.TryParse(AdjustAmount, out adjustAmount))
                {
                    message = string.Format("Error: Invalid adjustment: {0}", adjustAmount);
                    status  = enumStatus.BalanceAdjustFailed;
                }
                if (!string.IsNullOrEmpty(UserName))
                {
                    MatchMeDB.Instance.UserTable.TryGetValue(UserName, out user);
                }
                if (user == null && !string.IsNullOrEmpty(UserId))
                {
                    string userDoc = string.Empty;
                    MatchMeDB.Instance.Users.TryGetValue(UserId, out userDoc);
                    if (userDoc != null)
                    {
                        user = new User(userDoc);
                    }
                }
                if (user == null)
                {
                    message = string.Format("Error: Can't retrieve the User from the db via the keys. UserName{0}, UserId{1}", UserName, UserId);
                    status  = enumStatus.BalanceAdjustFailed;
                }
                else
                {
                    //We found the User in DB, so we update it!
                    user.Balance += adjustAmount;
                    if (user.Balance < 0)
                    {
                        message = string.Format("Error: Balance less than 0. UserName{0}, UserId{1}", UserName, user.Balance);
                        status  = enumStatus.BalanceAdjustFailed;
                    }
                    status = MatchMeDB.Instance.UpdateUser(user);
                    if (status.Equals(enumStatus.BalanceAdjusted))
                    {
                        message = string.Format("Balance Adjusted. {0}", user.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                ServerLog.LogException(ex, string.Format("Add User: {0}", user.ToString()));
                message = ex.Message;
                status  = enumStatus.BalanceAdjustFailed;
            }
            var result = new Dictionary <string, string> {
                { "status", status.ToString() },
                { "message", message }
            };

            return(JsonConvert.SerializeObject(result));
        }