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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 112 - (show annotations) (download)
Mon May 28 16:28:03 2007 UTC (16 years, 11 months ago) by torben
File size: 3828 byte(s)
Now we have a working test-server...
1 #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 m_buffer[1] = tmpprice>>24;
80 m_buffer[2] = tmpprice>>16;
81 m_buffer[3] = tmpprice>>8;
82 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 m_total = 0;
106 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 m_buffer[1] = tmpprice>>24;
114 m_buffer[2] = tmpprice>>16;
115 m_buffer[3] = tmpprice>>8;
116 m_buffer[4] = tmpprice;
117
118 Send(m_buffer, 5);
119
120 m_message.Format("Total requested - returning %.2f", m_total);
121 }
122
123 //Id 3
124 void TerminalSocket::RequestChangePackage()
125 {
126 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 unsigned change = amount - tmpprice;
129
130 m_buffer[0] = 0x01; //ack
131 m_buffer[1] = change>>24;
132 m_buffer[2] = change>>16;
133 m_buffer[3] = change>>8;
134 m_buffer[4] = change;
135
136 Send(m_buffer, 5);
137
138 m_message.Format( "Request change (0x03) recieved %.2f -> returning %.2f", amount/100.0, change/100.0);
139 }
140
141 //Id 4
142 void TerminalSocket::AbortLastPackage()
143 {
144 char ack = 0x01;
145 m_items.pop_back();
146 Send(&ack,1);
147
148 m_message = "Abort last (0x04) recieved";
149 }
150
151 //Id 5
152 void TerminalSocket::AbortSessionPackage()
153 {
154 char ack = 0x01;
155 m_items.clear();
156 Send(&ack,1);
157
158 m_message = "Abort session (0x05) recieved";
159 }
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
170 m_items.clear();
171 m_total = 0.0;
172
173 m_isOpen = false;
174 }
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 item.price = 7.00;
188 }
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