Subversion Repositories pytwidcpp

Rev

Rev 3 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 scream 1
# -*- coding: utf-8 -*-
2
""" PyCODC NMDC/ADC Client """
3
from twisted.internet import protocol
4
from twisted.protocols import basic
5
from twisted.python import log
6
 
7
import socket
8
import re
9
 
4 scream 10
class NMDC(basic.LineReceiver):
2 scream 11
    """
12
    NMDC Protocol implementation
13
    """
14
 
4 scream 15
    delimiter = "|"
16
 
2 scream 17
    buffer = ""
18
    encoding = None
19
    hostname = None
20
 
4 scream 21
    def lineReceived(self, line):
22
        print "Line Received: %s" % line
23
        command, params = self.parseLine(line)
2 scream 24
        self.handleCommand(command, params)
25
 
26
    def connectionLost(self, reason):
27
        print "Conlost: %s" %self
28
 
29
    def connectionMade(self):
30
        print "Made connect"
31
        if self.hostname is None:
32
            self.hostname = socket.getfqdn()
33
 
34
    def sendLine(self, line):
35
        _to_send = line.encode('utf-8')
36
        self.transport.write(_to_send)
37
 
38
    def parseLine(self, line):
39
        """
40
        Returns NMDC command and params
41
        """
42
        print "parse: %s" % line
43
        if line.startswith("$"):
44
            try:
45
                m = re.match("^\$(?P<command>[a-zA-Z]+)[ ](?P<params>.+$)", line)
46
 
47
                command = m.group("command")
48
                params = m.group("params")
49
                print "NMDC Command: %s; Params: %s" %(command, params)
50
            except:
51
                print "Exception: %s"% line
52
            return command, params
53
        else:
54
            return "", ""
55
 
56
    def handleCommand(self, command, params):
57
        print "handleCommand: %s %s" % (command, params)
58
        method = getattr(self, "nmdc_%s" % command, None)
59
        try:
60
            if method is not None:
61
                method(params)
62
            else: self.nmdc_unknown(command, params)
63
        except:
64
            print "handleCommand except"
65
            log.deferr()
66
        pass
67
 
68
    def makeAnswer(self, command, params):
69
        if params is not "":
70
            answer = "$%s %s|" % (command, params)
71
        else:
72
            answer = "$%s|"% command
73
 
74
        self.sendLine(answer)
75
        print "makeAnswer: %s" % answer
76
 
77
    def nmdc_unknown(self, command, params):
78
        print "nmdc_%s doesn't exist. Called with params: %s" % (command,params)
79