From 5dcac5a7fc451e666a8069b03c1f7d703edb7ccf Mon Sep 17 00:00:00 2001 From: "Chirag Kapadiya (TT-IND)" Date: Fri, 20 Feb 2026 08:56:34 -0800 Subject: [PATCH] Sample for ADL OMA --- .../App.config | 18 + .../Program.cs | 70 ++++ .../Properties/AssemblyInfo.cs | 36 ++ .../TTNETAPI_Sample_Console_OMA_ADL.csproj | 100 +++++ .../TTNetApiFunctions.cs | 357 ++++++++++++++++++ .../packages.config | 12 + TT_NET_CLIENT_SIDE/TTSamples.sln | 10 +- 7 files changed, 601 insertions(+), 2 deletions(-) create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/App.config create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Program.cs create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Properties/AssemblyInfo.cs create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNETAPI_Sample_Console_OMA_ADL.csproj create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNetApiFunctions.cs create mode 100644 TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/packages.config diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/App.config b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/App.config new file mode 100644 index 0000000..80a0a78 --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/App.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Program.cs b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Program.cs new file mode 100644 index 0000000..dc3161f --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Program.cs @@ -0,0 +1,70 @@ +// ********************************************************************************************************************** +// +// Copyright © 2005-2026 Trading Technologies International, Inc. +// All Rights Reserved Worldwide +// +// * * * S T R I C T L Y P R O P R I E T A R Y * * * +// +// WARNING: This file and all related programs (including any computer programs, example programs, and all source code) +// are the exclusive property of Trading Technologies International, Inc. ("TT"), are protected by copyright law and +// international treaties, and are for use only by those with the express written permission from TT. Unauthorized +// possession, reproduction, distribution, use or disclosure of this file and any related program (or document) derived +// from it is prohibited by State and Federal law, and by local law outside of the U.S. and may result in severe civil +// and criminal penalties. +// +// ************************************************************************************************************************ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + + +namespace TTNETAPI_Sample_Console_OMA_ADL +{ + class Program + { + static void Main(string[] args) + { + try + { + // Add your app secret Key here. It looks like: 00000000-0000-0000-0000-000000000000:00000000-0000-0000-0000-000000000000 + string appSecretKey = "Add your app secret Key here"; + + // Set the environment the app needs to run in here + tt_net_sdk.ServiceEnvironment environment = tt_net_sdk.ServiceEnvironment.DevCert; + // Select the mode in which you wish to run -- Client (outside the TT datacenter) + // or Server (on a dedicated machine inside TT datacenter) + tt_net_sdk.TTAPIOptions.SDKMode sdkMode = tt_net_sdk.TTAPIOptions.SDKMode.Server; + tt_net_sdk.TTAPIOptions apiConfig = new tt_net_sdk.TTAPIOptions( + sdkMode, + environment, + appSecretKey, + 5000); + + + // Start the TT API on the same thread + TTNetApiFunctions tf = new TTNetApiFunctions(); + + Thread workerThread = new Thread(() => tf.Start(apiConfig)); + workerThread.Name = "TT NET SDK Thread"; + workerThread.Start(); + + while (true) + { + string input = System.Console.ReadLine(); + if (input == "q") + break; + } + tf.Dispose(); + } + catch (Exception e) + { + Console.WriteLine(e.Message + "\n" + e.StackTrace); + } + + } + } +} diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Properties/AssemblyInfo.cs b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8605a62 --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TTNETAPI_Sample_Console_OMA_ADL")] +[assembly: AssemblyDescription("TT .NET SDK Sample - OMA ADL OCO Order Routing")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Trading Technologies International, Inc.")] +[assembly: AssemblyProduct("TTNETAPI_Sample_Console_OMA_ADL")] +[assembly: AssemblyCopyright("Copyright © 2026 Trading Technologies International, Inc.")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f8e9a1b2-3c4d-5e6f-7a8b-9c0d1e2f3a4b")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNETAPI_Sample_Console_OMA_ADL.csproj b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNETAPI_Sample_Console_OMA_ADL.csproj new file mode 100644 index 0000000..4e80bc5 --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNETAPI_Sample_Console_OMA_ADL.csproj @@ -0,0 +1,100 @@ + + + + + Debug + x64 + {F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B} + Exe + TTNETAPI_Sample_Console_OMA_ADL + TTNETAPI_Sample_Console_OMA_ADL + v4.6.1 + 512 + true + true + + + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + + ..\packages\TT.NET.SDK.3.5.1.1\lib\net461\core-wrapper.dll + + + ..\packages\Google.Protobuf.3.27.3\lib\net45\Google.Protobuf.dll + + + ..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll + + + ..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + + ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + + + + ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + + ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + + ..\packages\TimeZoneConverter.6.1.0\lib\netstandard2.0\TimeZoneConverter.dll + + + ..\packages\TT.NET.SDK.3.5.1.1\lib\net461\tt-net-api.dll + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNetApiFunctions.cs b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNetApiFunctions.cs new file mode 100644 index 0000000..84481a1 --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/TTNetApiFunctions.cs @@ -0,0 +1,357 @@ +// ********************************************************************************************************************** +// +// Copyright © 2005-2026 Trading Technologies International, Inc. +// All Rights Reserved Worldwide +// +// * * * S T R I C T L Y P R O P R I E T A R Y * * * +// +// WARNING: This file and all related programs (including any computer programs, example programs, and all source code) +// are the exclusive property of Trading Technologies International, Inc. ("TT"), are protected by copyright law and +// international treaties, and are for use only by those with the express written permission from TT. Unauthorized +// possession, reproduction, distribution, use or disclosure of this file and any related program (or document) derived +// from it is prohibited by State and Federal law, and by local law outside of the U.S. and may result in severe civil +// and criminal penalties. +// +// ************************************************************************************************************************ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using tt_net_sdk; + +namespace TTNETAPI_Sample_Console_OMA_ADL +{ + public class TTNetApiFunctions + { + // Declare the API objects + private TTAPI m_api = null; + private InstrumentLookup m_instrLookupRequest = null; + private PriceSubscription m_priceSubscription = null; + private tt_net_sdk.WorkerDispatcher m_disp = null; + private AlgoTradeSubscription m_algoTradeSubscription = null; + private AlgoLookupSubscription m_algoLookupSubscription = null; + private IReadOnlyCollection m_accounts = null; + private Instrument m_instrument = null; + private Algo m_algo = null; + private object m_Lock = new object(); + private bool m_isDisposed = false; + private Price m_price = Price.Empty; + + // Instrument Information + private readonly string m_market = "CME"; + private readonly string m_product = "CY"; + private readonly string m_prodType = "Future"; + private readonly string m_alias = "CY Mar26"; + + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Attach the worker Dispatcher + //////////////////////////////////////////////////////////////////////////////////////////////////// + public void Start(tt_net_sdk.TTAPIOptions apiConfig) + { + m_disp = tt_net_sdk.Dispatcher.AttachWorkerDispatcher(); + m_disp.DispatchAction(() => + { + Init(apiConfig); + }); + + m_disp.Run(); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Initialize the API + //////////////////////////////////////////////////////////////////////////////////////////////////// + public void Init(tt_net_sdk.TTAPIOptions apiConfig) + { + ApiInitializeHandler apiInitializeHandler = new ApiInitializeHandler(ttNetApiInitHandler); + TTAPI.ShutdownCompleted += TTAPI_ShutdownCompleted; + + //For Algo Orders + apiConfig.AlgoUserDisconnectAction = UserDisconnectAction.Cancel; + TTAPI.CreateTTAPI(tt_net_sdk.Dispatcher.Current, apiConfig, apiInitializeHandler); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for status of API initialization. + //////////////////////////////////////////////////////////////////////////////////////////////////// + public void ttNetApiInitHandler(TTAPI api, ApiCreationException ex) + { + if (ex == null) + { + Console.WriteLine("TT.NET SDK INITIALIZED"); + + // Authenticate your credentials + m_api = api; + m_api.TTAPIStatusUpdate += new EventHandler(m_api_TTAPIStatusUpdate); + m_api.Start(); + } + else if (ex.IsRecoverable) + { + // this is in informational update from the SDK + Console.WriteLine("TT.NET SDK Initialization Message: {0}", ex.Message); + if (ex.Code == ApiCreationException.ApiCreationError.NewAPIVersionAvailable) + { + // a newer version of the SDK is available - notify someone to upgrade + } + } + else + { + Console.WriteLine("TT.NET SDK Initialization Failed: {0}", ex.Message); + if (ex.Code == ApiCreationException.ApiCreationError.NewAPIVersionRequired) + { + // do something to upgrade the SDK package since it will not start until it is upgraded + // to the minimum version noted in the exception message + } + Dispose(); + } + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for status of authentication. + //////////////////////////////////////////////////////////////////////////////////////////////////// + public void m_api_TTAPIStatusUpdate(object sender, TTAPIStatusUpdateEventArgs e) + { + Console.WriteLine("TTAPIStatusUpdate: {0}", e); + if (e.IsReady == false) + { + // TODO: Do any connection lost processing here + return; + } + // TODO: Do any connection up processing here + // note: can happen multiple times with your application life cycle + + // can get status multiple times - do not create subscription if it exists + // + if (object.ReferenceEquals(m_instrLookupRequest, null) == false) + return; + + MarketId marketKey = Market.GetMarketIdFromName(m_market); + ProductType productType = Product.GetProductTypeFromName(m_prodType); + + // lookup an instrument + m_instrLookupRequest = new InstrumentLookup(tt_net_sdk.Dispatcher.Current, + marketKey, productType, m_product, m_alias); + + m_instrLookupRequest.OnData += m_instrLookupRequest_OnData; + m_instrLookupRequest.GetAsync(); + + } + + private void AlgoLookupSubscription_OnData(object sender, AlgoLookupEventArgs e) + { + if (e.Event == ProductDataEvent.Found) + { + Console.WriteLine("Algo Instrument Found: {0}", e.AlgoLookup.Algo.Alias); + m_algo = e.AlgoLookup.Algo; + + // Create an Algo TradeSubscription to listen for order / fill events only for orders submitted through it + m_algoTradeSubscription = new AlgoTradeSubscription(tt_net_sdk.Dispatcher.Current, m_algo); + + m_algoTradeSubscription.OrderUpdated += new EventHandler(m_algoTradeSubscription_OrderUpdated); + m_algoTradeSubscription.OrderAdded += new EventHandler(m_algoTradeSubscription_OrderAdded); + m_algoTradeSubscription.OrderDeleted += new EventHandler(m_algoTradeSubscription_OrderDeleted); + m_algoTradeSubscription.OrderFilled += new EventHandler(m_algoTradeSubscription_OrderFilled); + m_algoTradeSubscription.OrderRejected += new EventHandler(m_algoTradeSubscription_OrderRejected); + m_algoTradeSubscription.OrderBookDownload += new EventHandler(m_algoTradeSubscription_OrderBookDownload); + m_algoTradeSubscription.Start(); + } + else if (e.Event == ProductDataEvent.NotAllowed) + { + Console.WriteLine("Not Allowed : Please check your Token access"); + } + else + { + // Algo Instrument was not found and TT API has given up looking for it + Console.WriteLine("Cannot find Algo instrument: {0}", e.Message); + Dispose(); + } + } + + void m_instrLookupRequest_OnData(object sender, InstrumentLookupEventArgs e) + { + if (e.Event == ProductDataEvent.Found) + { + // Instrument was found + m_instrument = e.InstrumentLookup.Instrument; + Console.WriteLine("Found: {0}", m_instrument); + + AlgoLookupSubscription algoLookupSubscription = new AlgoLookupSubscription(tt_net_sdk.Dispatcher.Current, "OCO"); + algoLookupSubscription.OnData += AlgoLookupSubscription_OnData; + algoLookupSubscription.GetAsync(); + + // Subscribe for market Data + m_priceSubscription = new PriceSubscription(m_instrument, tt_net_sdk.Dispatcher.Current); + m_priceSubscription.Settings = new PriceSubscriptionSettings(PriceSubscriptionType.MarketDepth); + m_priceSubscription.FieldsUpdated += m_priceSubscription_FieldsUpdated; + m_priceSubscription.Start(); + } + else if (e.Event == ProductDataEvent.NotAllowed) + { + Console.WriteLine("Not Allowed : Please check your Token access"); + } + else + { + // Instrument was not found and TT API has given up looking for it + Console.WriteLine("Cannot find instrument: {0}", e.Message); + Dispose(); + } + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for price update. + /// Source of the event. + /// Fields updated event information. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_priceSubscription_FieldsUpdated(object sender, FieldsUpdatedEventArgs e) + { + if (e.Error != null) + { + Console.WriteLine("Unrecoverable price subscription error: {0}", e.Error.Message); + Dispose(); + } + else if (e.Fields.GetBestBidPriceField().HasValue) + m_price = e.Fields.GetBestBidPriceField().Value - 1; + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order book download complete. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderBookDownload(object sender, OrderBookDownloadEventArgs e) + { + Console.WriteLine("Orderbook downloaded..."); + + // Get the accounts + m_accounts = m_api.Accounts; + + //Construct a dictionary of the parameters and the values to send out + // For OMA ADL algorithms, you can pass custom parameters + Dictionary oco_userparams = new Dictionary + { + {"Ignore Market State", true}, + // TTOrderKey: Specifies an existing child order to be adopted by the OMA algorithm + // The GUID "7c60f278-3728-4199-b969-2244e40abb69" is the SiteOrderKey of an existing order + // that you want the OCO algo to take control of and manage + {"TTOrderKey", "7c60f278-3728-4199-b969-2244e40abb69"} + }; + + var lines = oco_userparams.Select(kvp => kvp.Key + ": " + kvp.Value.ToString()); + Console.WriteLine(string.Join(Environment.NewLine, lines)); + + OrderProfile oco_op = m_algo.GetOrderProfile(m_instrument); + if (m_accounts.Count > 0) + oco_op.Account = m_accounts.ElementAt(0); + oco_op.Side = OrderSide.Buy; + oco_op.OrderType = OrderType.Limit; + + oco_op.UserParameters = oco_userparams; + m_algoTradeSubscription.SendOrder(oco_op); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order rejection. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderRejected(object sender, OrderRejectedEventArgs e) + { + Console.WriteLine("\nOrderRejected [{0}] Details:{1} [{2}] :", e.Order.SiteOrderKey, e.Message, e.OrderRejectReason); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order fills. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderFilled(object sender, OrderFilledEventArgs e) + { + if (e.FillType == tt_net_sdk.FillType.Full) + { + Console.WriteLine("\nOrderFullyFilled [{0}]: {1}@{2}", e.Fill.SiteOrderKey, e.Fill.Quantity, e.Fill.MatchPrice); + } + else + { + Console.WriteLine("\nOrderPartiallyFilled [{0}]: {1}@{2}", e.Fill.SiteOrderKey, e.Fill.Quantity, e.Fill.MatchPrice); + } + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order deletion. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderDeleted(object sender, OrderDeletedEventArgs e) + { + Console.WriteLine("\nOrderDeleted [{0}] , Message : {1}", e.OldOrder.SiteOrderKey, e.Message); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order addition. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderAdded(object sender, OrderAddedEventArgs e) + { + if (e.Order.IsSynthetic) + Console.WriteLine("\n PARENT Algo OrderAdded [{0}] for Algo : {1} with Synthetic Status : {2} ", e.Order.SiteOrderKey, e.Order.Algo.Alias, e.Order.SyntheticStatus.ToString()); + else + Console.WriteLine("\nCHILD OrderAdded [{0}] {1}: {2}", e.Order.SiteOrderKey, e.Order.BuySell, e.Order.ToString()); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + /// Event notification for order update. + //////////////////////////////////////////////////////////////////////////////////////////////////// + void m_algoTradeSubscription_OrderUpdated(object sender, OrderUpdatedEventArgs e) + { + if(e.NewOrder.ExecutionType == ExecType.Restated) + Console.WriteLine("\n PARENT Algo Order Restated [{0}] for Algo : {1} with Synthetic Status : {2} ", e.NewOrder.SiteOrderKey, e.NewOrder.Algo.Alias, e.NewOrder.SyntheticStatus.ToString()); + else + Console.WriteLine("\nOrderUpdated [{0}] {1}: {2}", e.NewOrder.SiteOrderKey, e.NewOrder.BuySell, e.NewOrder.ToString()); + } + + public void Dispose() + { + lock (m_Lock) + { + if (!m_isDisposed) + { + // Unattached callbacks and dispose of all subscriptions + if (m_instrLookupRequest != null) + { + m_instrLookupRequest.OnData -= m_instrLookupRequest_OnData; + m_instrLookupRequest.Dispose(); + m_instrLookupRequest = null; + } + + if (m_algoLookupSubscription != null) + { + m_algoLookupSubscription.OnData -= AlgoLookupSubscription_OnData; + m_algoLookupSubscription.Dispose(); + m_algoLookupSubscription = null; + } + + if (m_priceSubscription != null) + { + m_priceSubscription.FieldsUpdated -= m_priceSubscription_FieldsUpdated; + m_priceSubscription.Dispose(); + m_priceSubscription = null; + } + + if (m_algoTradeSubscription != null) + { + m_algoTradeSubscription.OrderUpdated -= m_algoTradeSubscription_OrderUpdated; + m_algoTradeSubscription.OrderAdded -= m_algoTradeSubscription_OrderAdded; + m_algoTradeSubscription.OrderDeleted -= m_algoTradeSubscription_OrderDeleted; + m_algoTradeSubscription.OrderFilled -= m_algoTradeSubscription_OrderFilled; + m_algoTradeSubscription.OrderRejected -= m_algoTradeSubscription_OrderRejected; + m_algoTradeSubscription.Dispose(); + m_algoTradeSubscription = null; + } + + m_isDisposed = true; + } + + TTAPI.Shutdown(); + } + } + + public void TTAPI_ShutdownCompleted(object sender, EventArgs e) + { + // Dispose of any other objects / resources + Console.WriteLine("TTAPI shutdown completed"); + } + } +} diff --git a/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/packages.config b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/packages.config new file mode 100644 index 0000000..f88bc01 --- /dev/null +++ b/TT_NET_CLIENT_SIDE/TTNETAPI_Sample_Console_OMA_ADL/packages.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/TT_NET_CLIENT_SIDE/TTSamples.sln b/TT_NET_CLIENT_SIDE/TTSamples.sln index c900518..f8fe146 100644 --- a/TT_NET_CLIENT_SIDE/TTSamples.sln +++ b/TT_NET_CLIENT_SIDE/TTSamples.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29123.88 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36603.0 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TTNETAPI_Sample_Console_OrderRouting", "TTNETAPI_Sample_Console_OrderRouting\TTNETAPI_Sample_Console_OrderRouting.csproj", "{7DCAAE8C-3F6F-447F-AB8C-4BC2CB134F76}" EndProject @@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TTNETAPI_Sample_Console_Pri EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TTNETAPI_Sample_WPF_VolumeRatio", "TTNETAPI_Sample_WPF_VolumeRatio\TTNETAPI_Sample_WPF_VolumeRatio.csproj", "{3A69FD09-6842-4655-99CE-6CD1FD5555CE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TTNETAPI_Sample_Console_OMA_ADL", "TTNETAPI_Sample_Console_OMA_ADL\TTNETAPI_Sample_Console_OMA_ADL.csproj", "{F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -69,6 +71,10 @@ Global {3A69FD09-6842-4655-99CE-6CD1FD5555CE}.Debug|x64.Build.0 = Debug|x64 {3A69FD09-6842-4655-99CE-6CD1FD5555CE}.Release|x64.ActiveCfg = Release|x64 {3A69FD09-6842-4655-99CE-6CD1FD5555CE}.Release|x64.Build.0 = Release|x64 + {F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B}.Debug|x64.ActiveCfg = Debug|x64 + {F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B}.Debug|x64.Build.0 = Debug|x64 + {F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B}.Release|x64.ActiveCfg = Release|x64 + {F8E9A1B2-3C4D-5E6F-7A8B-9C0D1E2F3A4B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE