Beispiel #1
0
class OTClient:
    def __init__(self, id):
        self.id = id
        self.ot = OTEngine(id)
        self.list = []
        self.queue = None

    def start(self):
        if (self.queue == None):
            raise Exception("Already started!")
        for i in range(len(self.queue)):
            v = self.queue[i]
            self._apply(self.ot.remoteEvent(v[0], v[1]))
        self.queue = None

    def stop(self):
        if (self.queue != None):
            raise Exception("Already stopped!")
        self.queue = []

    def insert(self, pos, val):
        if (pos < 0 or pos > len(self.list)):
            raise Exception("Out of bounds!")
        self.list.insert(pos, val)
        op = self.ot.createOp("list", val, "insert", pos)
        return self.ot.localEvent(op)

    def update(self, pos, val):
        if (pos < 0 or pos >= len(self.list)):
            raise Exception("Out of bounds!")
        self.list[pos] = val
        op = self.ot.createOp("list", val, "update", pos)
        return self.ot.localEvent(op)

    def delete(self, pos):
        if (pos < 0 or pos >= len(self.list)):
            raise Exception("Out of bounds!")
        self.list.pop(pos)
        op = self.ot.createOp("list", None, "delete", pos)
        return self.ot.localEvent(op)

    def remote(self, order, op):
        if (self.queue != None):
            self.queue.append((order, op))
        else:
            self._apply(self.ot.remoteEvent(order, op))

    def _apply(self, op):
        type = op["type"]
        position = op["position"]
        value = op["value"]
        if ("insert" == type):
            self.list.insert(position, value)
        elif ("update" == type):
            self.list[position] = value
        elif ("delete" == type):
            self.list.pop(position)
Beispiel #2
0
class OTClient:
    def __init__(self, id):
        self.id = id
        self.ot = OTEngine(id)
        self.list = []
        self.queue = None
    def start(self):
        if (self.queue == None):
            raise Exception("Already started!")
        for i in range(len(self.queue)):
            v = self.queue[i]
            self._apply(self.ot.remoteEvent(v[0], v[1]))
        self.queue = None
    def stop(self):
        if (self.queue != None):
            raise Exception("Already stopped!")
        self.queue = []
    def insert(self, pos, val):
        if (pos < 0 or pos > len(self.list)):
            raise Exception("Out of bounds!")
        self.list.insert(pos, val)
        op = self.ot.createOp("list", val, "insert", pos)
        return self.ot.localEvent(op)
    def update(self, pos, val):
        if (pos < 0 or pos >= len(self.list)):
            raise Exception("Out of bounds!")
        self.list[pos] = val
        op = self.ot.createOp("list", val, "update", pos)
        return self.ot.localEvent(op)
    def delete(self, pos):
        if (pos < 0 or pos >= len(self.list)):
            raise Exception("Out of bounds!")
        self.list.pop(pos)
        op = self.ot.createOp("list", None, "delete", pos)
        return self.ot.localEvent(op)
    def remote(self, order, op):
        if (self.queue != None):
            self.queue.append((order, op))
        else:
            self._apply(self.ot.remoteEvent(order, op))
    def _apply(self, op):
        type = op["type"]
        position = op["position"]
        value = op["value"]
        if ("insert" == type):
            self.list.insert(position, value)
        elif ("update" == type):
            self.list[position] = value
        elif ("delete" == type):
            self.list.pop(position)
Beispiel #3
0
 def __init__(self, id):
     self.id = id
     self.ot = OTEngine(id)
     self.list = []
     self.queue = None
Beispiel #4
0
 def __init__(self, id):
     self.id = id
     self.ot = OTEngine(id)
     self.list = []
     self.queue = None