Realtime APIs
概要
自動再接続機能により接続が切断されても自動的に再接続を行います。
Public/Private 全てのインターフェースを通じて、RealtimeSourceFactory のインスタンス毎に単一の接続しか使用しません。
Reactive Extensions を利用して実装されており、1つのソースを複数箇所で同時に Subscribe できます。またそれぞれのハンドラは別スレッドで実行されます。
Public Channels
code:C#
using BitFlyerDotNet.LightningApi;
// Display realtime executions from WebSocket
using (var factory = new RealtimeSourceFactory())
using (var source = factory.GetExecutionSource(BfProductCode.FXBTCJPY))
{
source.Subscribe(exec =>
{
Console.WriteLine("{0} {1} {2} {3} {4} {5}",
exec.ExecutionId,
exec.Side,
exec.Price,
exec.Size,
exec.ExecutedTime.ToLocalTime(),
exec.ChildOrderAcceptanceId);
});
Console.ReadLine();
}
Private Channels
Public Channels の API も同時に利用できます。Public と Private の複数チャネルを作成する必要はありません。
code:C#
using BitFlyerDotNet.LightningApi;
// Input API key and secret
Console.Write("Key:"); var key = Console.ReadLine();
Console.Write("Secret:"); var secret = Console.ReadLine();
// Display child order event from WebSocket
using (var factory = new RealtimeSourceFactory(key, secret))
using (var source = factory.GetChildOrderEventsSource(BfProductCode.FXBTCJPY))
{
source.Subscribe(e =>
{
Console.WriteLine($"{e.EventDate} {e.EventType}");
});
Console.ReadLine();
}
詳細
自動オープン
接続は自動的にに行われます。また、アプリケーションの開始時、明示的に Open() メソッドを呼び出すことで、接続処理を予め行って、講読開始時の反応速度を向上できます。
自動再接続待機時間の変更
自動再接続の待機時間は5秒に設定されていますが、変更することができます。
code:C#
RealtimeSourceFactory.WebSocketReconnectionIntervalMs = 5000; // 5000 milliseconds
約定情報配信開始制御
各配信は、その講読(Subscribe)と同時に配信を開始しますが、約定情報(GetExecutionSource) は、その講読と配信開始を別々に制御することができます。本機能は、複数のリアルタイムチャートを同時に表示するために利用されています。
code:C#
using (var factory = new RealtimeSourceFactory())
using (var source = factory.GetExecutionSource(BfProductCode.FXBTCJPY, true))
{
source.Subscribe(exec => { /* Subscription A */ });
source.Subscribe(exec => { /* Subscription B */ });
source.Subscribe(exec => { /* Subscription C */ });
factory.StartExecutionSource(BfProductCode.FXBTCJPY);
Console.ReadLine();
}
Subscribe ハンドラ実行スレッド
デフォルトは Thread Pool です。Reactive Extensions のスケジューラを変更することで実行スレッドを変更できます。
code:C#
using System.Reactive.Concurrency;
RealtimeSourceFactory.Scheduler = Scheduler.Default; // Run on thread pool
Links