Skip to content

Commit 5a09b8e

Browse files
committed
Gateways
1 parent 96d5e84 commit 5a09b8e

8 files changed

Lines changed: 63 additions & 148 deletions

File tree

Gateways/Coin/Libs/Coin.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="CryptoClients.Net" Version="4.0.2" />
11+
<PackageReference Include="CryptoClients.Net" Version="4.0.4" />
1212
</ItemGroup>
1313

1414
<ItemGroup>

Gateways/Schwab/Libs/Grains/ConnectionGrain.cs

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
using Core.Extensions;
44
using Core.Grains;
55
using Core.Models;
6+
using Orleans;
67
using Schwab.Enums;
78
using Schwab.Messages;
89
using Schwab.Models;
10+
using System;
911
using System.Linq;
1012
using System.Threading;
1113
using System.Threading.Tasks;
@@ -14,12 +16,6 @@ namespace Schwab.Grains
1416
{
1517
public interface ISchwabConnectionGrain : IConnectionGrain
1618
{
17-
/// <summary>
18-
/// Stamp
19-
/// </summary>
20-
/// <param name="accessToken"></param>
21-
Task<StatusResponse> Stamp(string accessToken);
22-
2319
/// <summary>
2420
/// Connect
2521
/// </summary>
@@ -41,26 +37,17 @@ public class SchwabConnectionGrain : ConnectionGrain, ISchwabConnectionGrain
4137
/// <summary>
4238
/// Connector
4339
/// </summary>
44-
protected SchwabBroker connector = new();
40+
protected SchwabBroker connector;
4541

4642
/// <summary>
47-
/// Observer
43+
/// Timer
4844
/// </summary>
49-
protected ITradeObserver observer;
45+
protected IDisposable counter;
5046

5147
/// <summary>
52-
/// Stamp
48+
/// Observer
5349
/// </summary>
54-
/// <param name="accessToken"></param>
55-
public virtual async Task<StatusResponse> Stamp(string accessToken)
56-
{
57-
connector.AccessToken = accessToken;
58-
59-
return new()
60-
{
61-
Data = StatusEnum.Active
62-
};
63-
}
50+
protected ITradeObserver observer;
6451

6552
/// <summary>
6653
/// Connect
@@ -73,12 +60,55 @@ public virtual async Task<StatusResponse> Setup(Connection connection, ITradeObs
7360

7461
state = connection;
7562
observer = grainObserver;
76-
connector.ClientId = connection.Id;
77-
connector.ClientSecret = connection.Secret;
78-
connector.AccessToken = connection.AccessToken;
79-
connector.RefreshToken = connection.RefreshToken;
63+
connector = new SchwabBroker()
64+
{
65+
ClientId = connection.Id,
66+
ClientSecret = connection.Secret,
67+
AccessToken = connection.AccessToken,
68+
RefreshToken = connection.RefreshToken
69+
};
70+
71+
var descriptor = this.GetDescriptor();
72+
var scope = await connector.Authenticate();
73+
74+
connector.AccessToken = scope?.AccessToken;
75+
76+
var account = await connector.GetAccountCode(CancellationToken.None);
77+
78+
connection = connection with
79+
{
80+
AccessToken = scope?.AccessToken,
81+
Account = connection.Account with { Descriptor = account?.FirstOrDefault()?.HashValue }
82+
};
83+
84+
await connector.Stream(CancellationToken.None);
85+
86+
await GrainFactory.GetGrain<ISchwabOrdersGrain>(descriptor).Setup(connection);
87+
await GrainFactory.GetGrain<ISchwabPositionsGrain>(descriptor).Setup(connection);
88+
await GrainFactory.GetGrain<ISchwabOrderSenderGrain>(descriptor).Setup(connection);
89+
await GrainFactory.GetGrain<ISchwabTransactionsGrain>(descriptor).Setup(connection, observer);
90+
91+
foreach (var o in connection.Account.Instruments.Values)
92+
{
93+
await GrainFactory.GetGrain<ISchwabOptionsGrain>(this.GetDescriptor(o.Name)).Setup(connection);
94+
}
95+
96+
counter = this.RegisterGrainTimer(async data =>
97+
{
98+
connection = connection with { AccessToken = scope?.AccessToken };
99+
100+
await GrainFactory.GetGrain<ISchwabOrdersGrain>(descriptor).Setup(connection);
101+
await GrainFactory.GetGrain<ISchwabPositionsGrain>(descriptor).Setup(connection);
102+
await GrainFactory.GetGrain<ISchwabOrderSenderGrain>(descriptor).Setup(connection);
103+
await GrainFactory.GetGrain<ISchwabTransactionsGrain>(descriptor).Setup(connection, observer);
104+
105+
foreach (var o in state.Account.Instruments.Values)
106+
{
107+
await GrainFactory.GetGrain<ISchwabOptionsGrain>(this.GetDescriptor(o.Name)).Setup(connection);
108+
}
109+
110+
}, 0, TimeSpan.Zero, TimeSpan.FromMinutes(1));
80111

81-
await connector.ConnectStream(CancellationToken.None);
82112
await Task.WhenAll(connection.Account.Instruments.Values.Select(Subscribe));
83113

84114
return new()
@@ -95,6 +125,7 @@ public override Task<StatusResponse> Disconnect()
95125
connections?.ForEach(o => o.Dispose());
96126
connections?.Clear();
97127
connector?.Dispose();
128+
counter?.Dispose();
98129

99130
return Task.FromResult(new StatusResponse
100131
{

Gateways/Schwab/Libs/Grains/OptionsGrain.cs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ namespace Schwab.Grains
1313
{
1414
public interface ISchwabOptionsGrain : IOptionsGrain
1515
{
16-
/// <summary>
17-
/// Stamp
18-
/// </summary>
19-
/// <param name="accessToken"></param>
20-
Task<StatusResponse> Stamp(string accessToken);
21-
2216
/// <summary>
2317
/// Connect
2418
/// </summary>
@@ -38,20 +32,6 @@ public class SchwabOptionsGrain : OptionsGrain, ISchwabOptionsGrain
3832
/// </summary>
3933
protected SchwabBroker connector = new();
4034

41-
/// <summary>
42-
/// Stamp
43-
/// </summary>
44-
/// <param name="accessToken"></param>
45-
public virtual async Task<StatusResponse> Stamp(string accessToken)
46-
{
47-
connector.AccessToken = accessToken;
48-
49-
return new()
50-
{
51-
Data = StatusEnum.Active
52-
};
53-
}
54-
5535
/// <summary>
5636
/// Connect
5737
/// </summary>

Gateways/Schwab/Libs/Grains/OrdersGrain.cs

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ namespace Schwab.Grains
1313
{
1414
public interface ISchwabOrdersGrain : IOrdersGrain
1515
{
16-
/// <summary>
17-
/// Stamp
18-
/// </summary>
19-
/// <param name="accessToken"></param>
20-
Task<StatusResponse> Stamp(string accessToken);
21-
2216
/// <summary>
2317
/// Connect
2418
/// </summary>
@@ -38,20 +32,6 @@ public class SchwabOrdersGrain : OrdersGrain, ISchwabOrdersGrain
3832
/// </summary>
3933
protected SchwabBroker connector = new();
4034

41-
/// <summary>
42-
/// Stamp
43-
/// </summary>
44-
/// <param name="accessToken"></param>
45-
public virtual async Task<StatusResponse> Stamp(string accessToken)
46-
{
47-
connector.AccessToken = accessToken;
48-
49-
return new()
50-
{
51-
Data = StatusEnum.Active
52-
};
53-
}
54-
5535
/// <summary>
5636
/// Connect
5737
/// </summary>
@@ -76,7 +56,7 @@ public override async Task<OrdersResponse> Orders(Criteria criteria)
7656
var cleaner = new CancellationTokenSource(state.Timeout);
7757
var query = new OrderQuery
7858
{
79-
AccountCode = criteria.Account.Descriptor,
59+
AccountCode = state.Account.Descriptor,
8060
ToEnteredTime = criteria.MaxDate ?? DateTime.Now,
8161
FromEnteredTime = criteria.MinDate ?? DateTime.Now.AddDays(-30)
8262
};

Gateways/Schwab/Libs/Grains/PositionsGrain.cs

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ namespace Schwab.Grains
1212
{
1313
public interface ISchwabPositionsGrain : IPositionsGrain
1414
{
15-
/// <summary>
16-
/// Stamp
17-
/// </summary>
18-
/// <param name="accessToken"></param>
19-
Task<StatusResponse> Stamp(string accessToken);
20-
2115
/// <summary>
2216
/// Connect
2317
/// </summary>
@@ -37,20 +31,6 @@ public class SchwabPositionsGrain : PositionsGrain, ISchwabPositionsGrain
3731
/// </summary>
3832
protected SchwabBroker connector = new();
3933

40-
/// <summary>
41-
/// Stamp
42-
/// </summary>
43-
/// <param name="accessToken"></param>
44-
public virtual async Task<StatusResponse> Stamp(string accessToken)
45-
{
46-
connector.AccessToken = accessToken;
47-
48-
return new()
49-
{
50-
Data = StatusEnum.Active
51-
};
52-
}
53-
5434
/// <summary>
5535
/// Connect
5636
/// </summary>
@@ -73,7 +53,7 @@ public virtual async Task<StatusResponse> Setup(Connection connection)
7353
public override async Task<OrdersResponse> Positions(Criteria criteria)
7454
{
7555
var cleaner = new CancellationTokenSource(state.Timeout);
76-
var query = new AccountQuery { AccountCode = criteria.Account.Descriptor };
56+
var query = new AccountQuery { AccountCode = state.Account.Descriptor };
7757
var messages = await connector.GetPositions(query, cleaner.Token);
7858
var items = messages.Select(MapPosition);
7959

Gateways/Schwab/Libs/Grains/TransactionsGrain.cs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ namespace Schwab.Grains
99
{
1010
public interface ISchwabTransactionsGrain : ITransactionsGrain
1111
{
12-
/// <summary>
13-
/// Stamp
14-
/// </summary>
15-
/// <param name="accessToken"></param>
16-
Task<StatusResponse> Stamp(string accessToken);
17-
1812
/// <summary>
1913
/// Connect
2014
/// </summary>
@@ -35,20 +29,6 @@ public class SchwabTransactionsGrain : TransactionsGrain, ISchwabTransactionsGra
3529
/// </summary>
3630
protected SchwabBroker connector = new();
3731

38-
/// <summary>
39-
/// Stamp
40-
/// </summary>
41-
/// <param name="accessToken"></param>
42-
public virtual async Task<StatusResponse> Stamp(string accessToken)
43-
{
44-
connector.AccessToken = accessToken;
45-
46-
return new()
47-
{
48-
Data = StatusEnum.Active
49-
};
50-
}
51-
5232
/// <summary>
5333
/// Connect
5434
/// </summary>

Gateways/Schwab/Libs/Schwab.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="SchwabBroker" Version="1.0.5" />
11+
<PackageReference Include="SchwabBroker" Version="1.0.6" />
1212
</ItemGroup>
1313

1414
<ItemGroup>

Gateways/Schwab/Libs/SchwabGateway.cs

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
using Core.Models;
66
using Schwab.Grains;
77
using Schwab.Models;
8+
using System;
89
using System.Linq;
910
using System.Threading;
1011
using System.Threading.Tasks;
12+
using System.Timers;
1113

1214
namespace Schwab
1315
{
@@ -40,55 +42,17 @@ public override async Task<StatusResponse> Connect()
4042
{
4143
SubscribeToUpdates();
4244

43-
var connector = new SchwabBroker()
44-
{
45-
ClientId = ClientId,
46-
ClientSecret = ClientSecret,
47-
AccessToken = AccessToken,
48-
RefreshToken = RefreshToken,
49-
OnToken = scope =>
50-
{
51-
AccessToken = scope.AccessToken;
52-
53-
Component<ISchwabOrdersGrain>().Stamp(scope.AccessToken);
54-
Component<ISchwabPositionsGrain>().Stamp(scope.AccessToken);
55-
Component<ISchwabOrderSenderGrain>().Stamp(scope.AccessToken);
56-
Component<ISchwabConnectionGrain>().Stamp(scope.AccessToken);
57-
Component<ISchwabTransactionsGrain>().Stamp(scope.AccessToken);
58-
59-
Task.WhenAll(Account.Instruments.Values.Select(async o =>
60-
{
61-
await Component<ISchwabOptionsGrain>(o.Name).Stamp(scope.AccessToken);
62-
}));
63-
}
64-
};
65-
66-
await connector.Connect();
67-
68-
var account = await connector.GetAccountCode(CancellationToken.None);
6945
var observer = Connector.CreateObjectReference<ITradeObserver>(this);
70-
71-
Account = Account with { Descriptor = account?.FirstOrDefault()?.HashValue };
72-
7346
var connection = new Connection()
7447
{
7548
Id = ClientId,
7649
Secret = ClientSecret,
77-
AccessToken = AccessToken,
7850
RefreshToken = RefreshToken,
51+
AccessToken = AccessToken,
7952
Account = Account
8053
};
8154

82-
await Component<ISchwabOrdersGrain>().Setup(connection);
83-
await Component<ISchwabPositionsGrain>().Setup(connection);
84-
await Component<ISchwabOrderSenderGrain>().Setup(connection);
8555
await Component<ISchwabConnectionGrain>().Setup(connection, observer);
86-
await Component<ISchwabTransactionsGrain>().Setup(connection, observer);
87-
88-
await Task.WhenAll(Account.Instruments.Values.Select(async o =>
89-
{
90-
await Component<ISchwabOptionsGrain>(o.Name).Setup(connection);
91-
}));
9256

9357
return new()
9458
{

0 commit comments

Comments
 (0)