/[H8]/trunk/test-server/TerminalSocket.cpp
ViewVC logotype

Annotation of /trunk/test-server/TerminalSocket.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 112 - (hide annotations) (download)
Mon May 28 16:28:03 2007 UTC (17 years ago) by torben
File size: 3828 byte(s)
Now we have a working test-server...
1 torben 110 #include "StdAfx.h"
2     #include ".\terminalsocket.h"
3    
4     TerminalSocket::TerminalSocket(void)
5     {
6     m_total = 0.0;
7     }
8    
9     TerminalSocket::~TerminalSocket(void)
10     {
11     }
12    
13     void TerminalSocket::OnReceive(int nErrorCode)
14     {
15     int len = this->Receive(m_buffer,1024);
16    
17     switch (m_buffer[0])
18     {
19     case 0:
20     HelloPackage();
21     break;
22     case 1:
23     SalesDescriptionPackage();
24     break;
25     case 2:
26     RequestTotalPackage();
27     break;
28     case 3:
29     RequestChangePackage();
30     break;
31     case 4:
32     AbortLastPackage();
33     break;
34     case 5:
35     AbortSessionPackage();
36     break;
37     case 6:
38     GoodByePackage();
39     break;
40     default:
41     m_message.Format("Unknown request ID: %d", m_buffer[0]);
42     }
43    
44     dataRecieved.emit();
45     }
46    
47     //Id 0
48     void TerminalSocket::HelloPackage()
49     {
50     m_termid = m_buffer[1];
51     char ack = 0x01;
52     Send(&ack,1);
53    
54     m_message.Format("Hello (0x00) recieved with terminalID=%d", m_termid);
55     }
56    
57     //Id 1
58     void TerminalSocket::SalesDescriptionPackage()
59     {
60     CString barcode;
61     char ack;
62     char strlen = m_buffer[2];
63    
64     unsigned tmpprice;
65     for (int i=0; i<strlen; i++)
66     barcode += m_buffer[i+3];
67    
68     SalesItemLine litem;
69     litem.item = FetchItemInfo(barcode);
70    
71     if (litem.item.isOk)
72     {
73     litem.count = m_buffer[1]; // Gem antallet
74     m_items.push_back(litem);
75     tmpprice = (unsigned) litem.item.price * 100;
76    
77     //generate reply
78     m_buffer[0] = 0x01; //Ack;
79 torben 112 m_buffer[1] = tmpprice>>24;
80     m_buffer[2] = tmpprice>>16;
81     m_buffer[3] = tmpprice>>8;
82 torben 110 m_buffer[4] = tmpprice;
83     m_buffer[5] = litem.item.description.GetLength();
84    
85     for (i=0; i<m_buffer[5]; i++)
86     m_buffer[i+6] = litem.item.description.GetAt(i);
87    
88     Send(m_buffer, litem.item.description.GetLength()+6);
89    
90     m_message.Format("Requested barcode %s x %d (%s)", barcode, litem.count, litem.item.description);
91     }
92     else
93     {
94     ack = 0;
95     Send(&ack,1);
96     m_message = "Unknown barcode : ";
97     m_message += barcode;
98     }
99    
100     }
101    
102     //Id 2
103     void TerminalSocket::RequestTotalPackage()
104     {
105 torben 112 m_total = 0;
106 torben 110 for (unsigned int i=0; i<m_items.size(); i++)
107     {
108     m_total += m_items[i].item.price * m_items[i].count;
109     }
110    
111     unsigned tmpprice = (unsigned) m_total*100;
112     m_buffer[0] = 0x01; //ack
113 torben 112 m_buffer[1] = tmpprice>>24;
114     m_buffer[2] = tmpprice>>16;
115     m_buffer[3] = tmpprice>>8;
116 torben 110 m_buffer[4] = tmpprice;
117    
118     Send(m_buffer, 5);
119 torben 112
120     m_message.Format("Total requested - returning %.2f", m_total);
121 torben 110 }
122    
123     //Id 3
124     void TerminalSocket::RequestChangePackage()
125     {
126 torben 112 unsigned amount = (m_buffer[1]<<24) + (m_buffer[2]<<16) + (m_buffer[3]<<8) + m_buffer[4];
127     unsigned tmpprice = (unsigned) m_total*100;
128 torben 110 unsigned change = amount - tmpprice;
129    
130     m_buffer[0] = 0x01; //ack
131 torben 112 m_buffer[1] = change>>24;
132     m_buffer[2] = change>>16;
133     m_buffer[3] = change>>8;
134 torben 110 m_buffer[4] = change;
135    
136     Send(m_buffer, 5);
137    
138 torben 112 m_message.Format( "Request change (0x03) recieved %.2f -> returning %.2f", amount/100.0, change/100.0);
139 torben 110 }
140    
141     //Id 4
142     void TerminalSocket::AbortLastPackage()
143     {
144     char ack = 0x01;
145     m_items.pop_back();
146     Send(&ack,1);
147 torben 112
148     m_message = "Abort last (0x04) recieved";
149 torben 110 }
150    
151     //Id 5
152     void TerminalSocket::AbortSessionPackage()
153     {
154     char ack = 0x01;
155     m_items.clear();
156     Send(&ack,1);
157 torben 112
158     m_message = "Abort session (0x05) recieved";
159 torben 110 }
160    
161     //Id 6
162     void TerminalSocket::GoodByePackage()
163     {
164     char ack = 0x01;
165     Send(&ack,1);
166     Sleep(1);
167     Close();
168     m_message = "Goodbye (0x06) recieved";
169 torben 112
170 torben 110 m_items.clear();
171     m_total = 0.0;
172 torben 112
173     m_isOpen = false;
174 torben 110 }
175    
176    
177     SalesItem TerminalSocket::FetchItemInfo(const CString& barcode)
178     {
179     SalesItem item;
180     item.isOk = false;
181    
182     if (barcode == "12345670")
183     {
184     item.isOk = true;
185     item.barcode = barcode;
186     item.description = "ĝl";
187 torben 112 item.price = 7.00;
188 torben 110 }
189     else if (barcode == "1234567000992")
190     {
191     item.isOk = true;
192     item.barcode = barcode;
193     item.description = "Whisky";
194     item.price = 119.00;
195     }
196     return item;
197     }

  ViewVC Help
Powered by ViewVC 1.1.20