#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] = tmpprice>>16; m_buffer[3] = tmpprice>>8; m_buffer[4] = tmpprice; m_buffer[5] = litem.item.description.GetLength(); for (i=0; i>24; m_buffer[2] = tmpprice>>16; m_buffer[3] = tmpprice>>8; m_buffer[4] = tmpprice; Send(m_buffer, 5); m_message.Format("Total requested - returning %.2f", m_total); } //Id 3 void TerminalSocket::RequestChangePackage() { unsigned amount = (m_buffer[1]<<24) + (m_buffer[2]<<16) + (m_buffer[3]<<8) + m_buffer[4]; unsigned tmpprice = (unsigned) m_total*100; 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); m_message.Format( "Request change (0x03) recieved %.2f -> returning %.2f", amount/100.0, change/100.0); } //Id 4 void TerminalSocket::AbortLastPackage() { char ack = 0x01; m_items.pop_back(); Send(&ack,1); m_message = "Abort last (0x04) recieved"; } //Id 5 void TerminalSocket::AbortSessionPackage() { char ack = 0x01; m_items.clear(); Send(&ack,1); m_message = "Abort session (0x05) recieved"; } //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; m_isOpen = false; } 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.00; } else if (barcode == "1234567000992") { item.isOk = true; item.barcode = barcode; item.description = "Whisky"; item.price = 119.00; } return item; }