mirror of
https://github.com/JS8Call-improved/JS8Call-improved
synced 2026-08-13 17:47:36 -04:00
Rename all header files with .h extension Fix function declaration in HamlibTransceiver.h that overrode member function but was not marked override Remove unused variable in Modulator.cpp Remove unused files from source tree Remove duplicate LazyFillComboBox files Reformat codebase to LLVM C++ standard
107 lines
2.7 KiB
Python
107 lines
2.7 KiB
Python
from __future__ import print_function
|
|
|
|
from socket import socket, AF_INET, SOCK_DGRAM
|
|
|
|
import json
|
|
import time
|
|
|
|
listen = ('127.0.0.1', 2242)
|
|
|
|
|
|
def from_message(content):
|
|
try:
|
|
return json.loads(content)
|
|
except ValueError:
|
|
return {}
|
|
|
|
|
|
def to_message(typ, value='', params=None):
|
|
if params is None:
|
|
params = {}
|
|
return json.dumps({'type': typ, 'value': value, 'params': params})
|
|
|
|
|
|
class Server(object):
|
|
first = True
|
|
def process(self, message):
|
|
typ = message.get('type', '')
|
|
value = message.get('value', '')
|
|
params = message.get('params', {})
|
|
if not typ:
|
|
return
|
|
|
|
print('->', typ)
|
|
|
|
if value:
|
|
print('-> value', value)
|
|
|
|
if params:
|
|
print('-> params: ', params)
|
|
|
|
if typ == 'PING':
|
|
if self.first:
|
|
self.send('MODE.SET_SPEED', '', params={'SPEED':3})
|
|
self.first = False
|
|
|
|
#### if typ == 'PING':
|
|
#### self.send('STATION.GET_GRID')
|
|
#### self.send('RIG.GET_FREQ')
|
|
#### self.send('STATION.GET_CALLSIGN')
|
|
#### self.send('RX.GET_CALL_ACTIVITY')
|
|
|
|
#### elif typ == 'STATION.GRID':
|
|
#### if value != 'EM73TU49TQ':
|
|
#### self.send('STATION.SET_GRID', 'EM73TU49TQ')
|
|
|
|
#### elif typ == 'RIG.FREQ':
|
|
#### if params.get('DIAL', 0) != 14064000:
|
|
#### self.send('RIG.SET_FREQ', '', {"DIAL": 14064000, "OFFSET": 977})
|
|
#### self.send('TX.SEND_MESSAGE', 'HELLO WORLD')
|
|
|
|
elif typ == 'CLOSE':
|
|
self.close()
|
|
|
|
def send(self, *args, **kwargs):
|
|
params = kwargs.get('params', {})
|
|
if '_ID' not in params:
|
|
params['_ID'] = int(time.time()*1000)
|
|
kwargs['params'] = params
|
|
message = to_message(*args, **kwargs)
|
|
print('outgoing message:', message)
|
|
self.sock.sendto(message, self.reply_to)
|
|
|
|
def listen(self):
|
|
print('listening on', ':'.join(map(str, listen)))
|
|
self.sock = socket(AF_INET, SOCK_DGRAM)
|
|
self.sock.bind(listen)
|
|
self.listening = True
|
|
try:
|
|
while self.listening:
|
|
content, addr = self.sock.recvfrom(65500)
|
|
print('incoming message:', ':'.join(map(str, addr)))
|
|
|
|
try:
|
|
message = json.loads(content)
|
|
except ValueError:
|
|
message = {}
|
|
|
|
if not message:
|
|
continue
|
|
|
|
self.reply_to = addr
|
|
self.process(message)
|
|
|
|
finally:
|
|
self.sock.close()
|
|
|
|
def close(self):
|
|
self.listening = False
|
|
|
|
|
|
|
|
def main():
|
|
s = Server()
|
|
s.listen()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|