Skip to content

Instantly share code, notes, and snippets.

@kollad
Created July 5, 2013 17:41
Show Gist options
  • Select an option

  • Save kollad/5936076 to your computer and use it in GitHub Desktop.

Select an option

Save kollad/5936076 to your computer and use it in GitHub Desktop.
import collections
import hashlib
import logging
import pickle
import random
import socket
import struct
log = logging.getLogger(__name__)
class Client(object):
def __init__(self, host='0.0.0.0', port=7777):
self.host = host
self.port = port
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._socket.connect((self.host, self.port))
def send(self, obj):
obj = self.pack(obj)
self._socket.sendall(obj)
data = self._socket.recv(1024)
print('Received: {}'.format(repr(data)))
def to_bytes(self, s, encoding='utf-8'):
return bytes(s, encoding)
def calculate_checksum(self, obj):
return hashlib.md5(pickle.dumps(obj)).hexdigest()
def pack(self, obj):
checksum = self.to_bytes(self.calculate_checksum(obj))
action = self.to_bytes(obj['action'])
value = obj['value']
packed = struct.pack(
'!I{}sh{}s'.format(len(action), len(checksum)),
len(action),
action,
value,
checksum
)
return packed
def close(self):
self._socket.close()
if __name__ == '__main__':
cl = Client()
cl.send({'action': 'set_level', 'value': random.choice(range(10))})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment