-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
80 lines (70 loc) · 3.16 KB
/
Copy pathApp.tsx
File metadata and controls
80 lines (70 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import { useCallback, useEffect, useRef, useState } from 'react'
import * as signalR from "@microsoft/signalr";
import './App.css'
import { SubscriptionResponse } from './subscriptionResponse';
import { SubscriptionNotification } from './subscriptionNotification';
const url = "https://localhost:8802/bondmonitorhub";
const App = () => {
const [messages, setMessages] = useState<string[]>([]);
const [connectionStatus, setConnectionStatus] = useState<string>('');
const connnectionRef = useRef<signalR.HubConnection>()
useEffect(() => {
try {
setConnectionStatus('Initialising');
connnectionRef.current = new signalR.HubConnectionBuilder()
.withUrl(url)
.withAutomaticReconnect()
.configureLogging(signalR.LogLevel.Information)
.build();
connnectionRef.current.start()
.then(() => {
console.log('SignalR Connection initialised successfully');
setConnectionStatus('Connected');
})
.catch(err => {
console.log(`Error initialising SignalR connection to URL ${url}`, err);
setConnectionStatus('Error');
});
connnectionRef.current.on("SubscriptionSuccessful", (response: string) => {
console.log('SubscriptionSuccessful received', response);
const responseObj: SubscriptionResponse = JSON.parse(response);
setMessages(prev => {
return [...prev, `Received subscription Id ${responseObj.SubscriptionId} for instruments ${responseObj.InstrumentIds?.join(', ')}`];
});
});
connnectionRef.current.on("SubscriptionNotification", (notification: string) => {
console.log('SubscriptionNotification received', notification);
const notificationObj: SubscriptionNotification = JSON.parse(notification);
setMessages(prev => {
return [
...prev,
`${notificationObj.SubscriptionId} notification:`,
...notificationObj.Data.map(item => `\t${item.InstrumentId} - bid:${item.Bid}, offer:${item.Offer}`)
];
});
});
} catch (e) {
console.log(`Error initialising SignalR connection to URL ${url}`, e);
setConnectionStatus('Error');
}
}, []);
const handleSendClick = useCallback(async () => {
if (connnectionRef.current) {
await connnectionRef.current.invoke("SubscribeToInstruments", ['instrumentId1', 'instrumentId2']);
}
}, []);
return (
<div className='root'>
<h2>Welcome</h2>
<p>Connection status: {connectionStatus}</p>
<div className='buttonContainer'>
<button onClick={handleSendClick}>Send Message</button>
</div>
<p>Messages:</p>
{messages.map((message, index) => (
<p key={`${index}_${message}`}>{message}</p>
))}
</div>
)
}
export default App