/[svn]/linuxsampler/trunk/src/network/lscpresultset.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/network/lscpresultset.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 116 by senkov, Tue Jun 8 00:48:20 2004 UTC revision 223 by schoenebeck, Sat Aug 21 11:43:53 2004 UTC
# Line 36  Line 36 
36   * ******************************************************/   * ******************************************************/
37    
38  #include "lscpresultset.h"  #include "lscpresultset.h"
 #include "../common/LinuxSamplerException.h"  
39    
40  //Construct an empty resultset  //Construct an empty resultset
41  LSCPResultSet::LSCPResultSet(void) {  //Default index is -1 meaning the resultset doesn't have an index
42    LSCPResultSet::LSCPResultSet(int index) {
43            result_index = index;
44          count = 0;          count = 0;
45          storage = "";          storage = "";
46            result_type = result_type_success;
47  }  }
48    
49  //Construct a resultset with a single line  //Construct a resultset with a single line
50  LSCPResultSet::LSCPResultSet(String Value) {  //Default index is -1 meaning the resultset doesn't have an index
51    LSCPResultSet::LSCPResultSet(String Value, int index) {
52            result_index = index;
53          count = 1;          count = 1;
54          storage = Value + "\r\n";          storage = Value + "\r\n";
55            result_type = result_type_success;
56  }  }
57    
58  //Add a label/value pair to the resultset  //Add a label/value pair to the resultset
# Line 55  LSCPResultSet::LSCPResultSet(String Valu Line 60  LSCPResultSet::LSCPResultSet(String Valu
60  void LSCPResultSet::Add(String Label, String Value) {  void LSCPResultSet::Add(String Label, String Value) {
61          if (count == -1)          if (count == -1)
62                  throw LinuxSamplerException("Attempting to change already produced resultset");                  throw LinuxSamplerException("Attempting to change already produced resultset");
63            if (result_type != result_type_success)
64                    throw LinuxSamplerException("Attempting to create illegal resultset");
65          storage = storage + Label + ": " + Value + "\r\n";          storage = storage + Label + ": " + Value + "\r\n";
66          count++;          count++;
67  }  }
68    
69    void LSCPResultSet::Add(int Value) {
70            Add(ToString(Value));
71    }
72    
73  void LSCPResultSet::Add(String Label, int Value) {  void LSCPResultSet::Add(String Label, int Value) {
74          char temp[16];          Add(Label, ToString(Value));
         snprintf(temp, sizeof(temp), "%i", Value);  
         Add(Label, temp);  
75  }  }
76    
77  void LSCPResultSet::Add(String Label, float Value) {  void LSCPResultSet::Add(String Label, float Value) {
78          char temp[16];          std::stringstream ss; //fixme: had issues with template and float?!
79          snprintf(temp, sizeof(temp), "%10.4f", Value);          ss << Value;
80          Add(Label, temp);          Add(Label, ss.str());
81    }
82    
83    void LSCPResultSet::Add(String Label, bool Value) {
84        String s = (Value) ? "true" : "false";
85        Add(Label, s);
86  }  }
87    
88  //Add a single string to the resultset  //Add a single string to the resultset
89  void LSCPResultSet::Add(String Value) {  void LSCPResultSet::Add(String Value) {
90            if (result_type != result_type_success)
91                    throw LinuxSamplerException("Attempting to create illegal resultset");
92          if (count == -1)          if (count == -1)
93                  throw LinuxSamplerException("Attempting to change already produced resultset");                  throw LinuxSamplerException("Attempting to change already produced resultset");
94          if (count != 0)          if (count != 0)
# Line 81  void LSCPResultSet::Add(String Value) { Line 97  void LSCPResultSet::Add(String Value) {
97          count = 1;          count = 1;
98  }  }
99    
100    //Generate an error result set from an exception.
101    //Per LSCP spec, error result is a sinle line in the following format:
102    //ERR:<CODE>:Message text\r\n
103    //This method will be used to generate unknown errors only (code 0)
104    //To generate errors with other codes as well as warnings use other methods (below).
105    //Because this is an unknown error, this method will also print message to the stderr.
106    void LSCPResultSet::Error(LinuxSamplerException e) {
107            e.PrintMessage();
108            Error(e.Message());
109    }
110    
111    //This will construct an error with a string and error code
112    //code has a default of 0
113    //String has a default of "Undefined Error"
114    void LSCPResultSet::Error (String message, int code) {
115            //Even though this is must be a single line resultset we won't throw
116            //anything here because this is already part of exception handling.
117            //We'll just 'forget' all previous results (if any) from this resultset.
118            result_type = result_type_error;
119            storage = "ERR:" + ToString(code) + ":" + message + "\r\n";
120            count = 1;
121    }
122    
123    //This will construct a warning with a string and error code
124    //code has a default of 0
125    //String has a default of "Undefined Error"
126    void LSCPResultSet::Warning (String message, int code) {
127            //FIXME: DO we want warnings as part of the resultset or
128            //do we want them to work like errors??? For now, make them work like errors.
129            result_type = result_type_warning;
130            if (result_index == -1)
131                    storage = "WRN:" + ToString(code) + ":" + message + "\r\n";
132            else
133                    storage = "WRN[" + ToString(result_index) + "]:" + ToString(code) + ":" + message + "\r\n";
134            count = 1;
135    }
136    
137  //Produce resultset  //Produce resultset
138  String LSCPResultSet::Produce(void) {  String LSCPResultSet::Produce(void) {
139            //FIXME: I'm assuming that only a sinle like "OK" can have index
140          if (count == 0) //When there is nothing in the resultset we just send "OK" to ack the request          if (count == 0) //When there is nothing in the resultset we just send "OK" to ack the request
141                  return "OK\r\n";                  if (result_index == -1)
142                            return "OK\r\n";
143                    else
144                            return "OK[" + ToString(result_index) + "]\r\n";
145          if (count == 1) //Single line results are just that, single line          if (count == 1) //Single line results are just that, single line
146                  return storage;                  return storage;
147          //Multiline results MUST end with a line with a single dot          //Multiline results MUST end with a line with a single dot

Legend:
Removed from v.116  
changed lines
  Added in v.223

  ViewVC Help
Powered by ViewVC