#include "StdAfx.h" #include ".\terminalsocket.h" TerminalSocket::TerminalSocket(void) { m_total = 0.0; } TerminalSocket::~TerminalSocket(void) { } void TerminalSocket::OnReceive(int nErrorCode) { int len = this->Receive(m_buffer,1024); switch (m_buffer[0]) { case 0: HelloPackage(); break; case 1: SalesDescriptionPackage(); break; case 2: RequestTotalPackage(); break; case 3: RequestChangePackage(); break; case 4: AbortLastPackage(); break; case 5: AbortSessionPackage(); break; case 6: GoodByePackage(); break; default: m_message.Format("Unknown request ID: %d", m_buffer[0]); } dataRecieved.emit(); } //Id 0 void TerminalSocket::HelloPackage() { m_termid = m_buffer[1]; char ack = 0x01; Send(&ack,1); m_message.Format("Hello (0x00) recieved with terminalID=%d", m_termid); } //Id 1 void TerminalSocket::SalesDescriptionPackage() { CString barcode; char ack; char strlen = m_buffer[2]; unsigned tmpprice; for (int i=0; i>24 + m_buffer[2]>>16 + m_buffer[3]>>8 + m_buffer[4]; unsigned tmpprice = (unsigned) m_total; unsigned change = amount - tmpprice; m_buffer[0] = 0x01; //ack m_buffer[1] = change<<24; m_buffer[2] = change<<16; m_buffer[3] = change<<8; m_buffer[4] = change; Send(m_buffer, 5); } //Id 4 void TerminalSocket::AbortLastPackage() { char ack = 0x01; m_items.pop_back(); Send(&ack,1); } //Id 5 void TerminalSocket::AbortSessionPackage() { char ack = 0x01; m_items.clear(); Send(&ack,1); } //Id 6 void TerminalSocket::GoodByePackage() { char ack = 0x01; Send(&ack,1); Sleep(1); Close(); m_message = "Goodbye (0x06) recieved"; m_items.clear(); m_total = 0.0; } SalesItem TerminalSocket::FetchItemInfo(const CString& barcode) { SalesItem item; item.isOk = false; if (barcode == "12345670") { item.isOk = true; item.barcode = barcode; item.description = "ĝl"; item.price = 7.65; } else if (barcode == "1234567000992") { item.isOk = true; item.barcode = barcode; item.description = "Whisky"; item.price = 119.00; } return item; }