public FirmRequestResult ProcessFirmRegistration(FirmRegistration request) { var firmName = request.Id; var depot = wallstreetClient.GetFirmDepot(firmName, exchangeId); if (depot == null) { depot = new FirmDepot() { FirmName = firmName, OwnedShares = 0 }; } depot.OwnedShares += request.Shares; var info = wallstreetClient.GetShareInformation(firmName, exchangeId); if (info == null) { info = new ShareInformation { FirmName = firmName, NoOfShares = 0, PricePerShare = request.PricePerShare, PurchasingVolume = 0, SalesVolume = 0, ExchangeName = exchangeId }; } info.NoOfShares += request.Shares; info.SalesVolume += request.Shares; var order = new Order() { Id = firmName + DateTime.Now.Ticks, ShareName = firmName, InvestorId = firmName, Type = OrderType.SELL, TotalNoOfShares = request.Shares, NoOfOpenShares = request.Shares, NoOfProcessedShares = 0, Status = OrderStatus.OPEN, Limit = 0, Prioritize = false, IsFundShare = false }; return(new FirmRequestResult { FirmDepot = depot, ShareInformation = info, Order = order }); }
public FirmDepot RegisterFirm(FirmRegistration request, string exchangeId) { if (data.Exchanges[exchangeId].Brokers.Count > 0) { FirmRequestResult result = data.Exchanges[exchangeId].Brokers.First().ProcessFirmRegistration(request) as FirmRequestResult; var depot = result.FirmDepot; var info = result.ShareInformation; var order = result.Order; data.Exchanges[exchangeId].FirmDepots[depot.FirmName] = depot; data.Exchanges[exchangeId].Orders[order.Id] = order; NotifySubscribers(data.Exchanges[exchangeId].OrderCallbacks, order); data.Exchanges[exchangeId].ShareInformation[info.FirmName] = info; NotifySubscribers(data.Exchanges[exchangeId].ShareInformationCallbacks, info); return(result.FirmDepot); } else { data.Exchanges[exchangeId].PendingFirmRegistrationRequests.Add(request); // TODO implement mechanism to call brokers when coming online. return(null); } }