You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.1 KiB
57 lines
1.1 KiB
import os
|
|
#import json
|
|
import socket
|
|
import sys
|
|
import time
|
|
import binascii
|
|
import struct
|
|
|
|
class SocketOverlay(object):
|
|
def __init__(self, socket):
|
|
self.socket = socket
|
|
|
|
def recv(self):
|
|
li = self.socket.recv(4)
|
|
l = struct.unpack("I", li)[0]
|
|
return self.socket.recv(l)
|
|
|
|
def send(self, data):
|
|
l = len(data)
|
|
self.socket.send(struct.pack("I", l))
|
|
self.socket.send(data)
|
|
|
|
def close(self):
|
|
self.socket.close()
|
|
|
|
class Command(object):
|
|
CMD_GET = 1
|
|
CMD_CLEAR = 2
|
|
CMD_SHUTDOWN = 3
|
|
|
|
def __init__(self):
|
|
self.uCommand = 0
|
|
self.uData = None
|
|
|
|
def serialise(self):
|
|
if self.uData==None:
|
|
return struct.pack("I", self.uCommand)+struct.pack("I", 0)
|
|
else:
|
|
return struct.pack("I", self.uCommand)+struct.pack("I", len(self.uData))+self.uData
|
|
|
|
@classmethod
|
|
def build(cls, command, data=None):
|
|
c = Command()
|
|
c.uCommand = command
|
|
c.uData = data
|
|
return c
|
|
|
|
@classmethod
|
|
def unserialise(cls, data):
|
|
cmd = struct.unpack("I", data[:4])[0]
|
|
ds = struct.unpack("I", data[4:8])[0]
|
|
if ds<1:
|
|
return Command.build(cmd)
|
|
else:
|
|
return Command.build(cmd, data[8:8+ds])
|
|
|