forked from bmoscon/cryptofeed
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo_udp.py
59 lines (46 loc) · 1.59 KB
/
demo_udp.py
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
'''
Copyright (C) 2018-2025 Bryant Moscon - [email protected]
Please see the LICENSE file for the terms and conditions
associated with this software.
'''
import socket
from time import sleep
from multiprocessing import Process
from yapic import json
from cryptofeed import FeedHandler
from cryptofeed.backends.socket import BookSocket, TradeSocket
from cryptofeed.defines import L2_BOOK, TRADES
from cryptofeed.exchanges import Coinbase
def receiver(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('127.0.0.1', port))
while True:
data, _ = sock.recvfrom(1024 * 64)
data = data.decode()
data = json.loads(data)
if data['type'] == 'chunked':
chunks = data['chunks']
buffer = []
buffer.append(data['data'])
for _ in range(chunks - 1):
data, _ = sock.recvfrom(1024 * 64)
data = data.decode()
data = json.loads(data)
buffer.append(data['data'])
data = json.loads(''.join(buffer))
print(data)
def main():
try:
p = Process(target=receiver, args=(5555,))
p.start()
sleep(1)
f = FeedHandler()
f.add_feed(Coinbase(channels=[L2_BOOK, TRADES], symbols=['BTC-USD'],
callbacks={TRADES: TradeSocket('udp://127.0.0.1', port=5555),
L2_BOOK: BookSocket('udp://127.0.0.1', port=5555),
}))
f.run()
finally:
p.terminate()
if __name__ == '__main__':
main()