1/* 2 * Copyright 2017, Adrien Destugues, pulkomandy@pulkomandy.tk 3 * Distributed under terms of the MIT license. 4 */ 5 6 7#include "FileSender.h" 8 9#include "SerialApp.h" 10 11#include <DataIO.h> 12#include <Message.h> 13#include <SerialPort.h> 14 15 16FileSender::~FileSender() 17{ 18} 19 20 21RawSender::RawSender(BDataIO* source, BSerialPort* sink, BHandler* listener) 22{ 23 // FIXME doing this all here in the constructor is not good. We need to 24 // do things asynchronously instead so as not to lock the application 25 // thread. 26 off_t sourceSize; 27 off_t position; 28 29 BPositionIO* pos = dynamic_cast<BPositionIO*>(source); 30 if (pos) 31 pos->GetSize(&sourceSize); 32 else 33 sourceSize = 0; 34 position = 0; 35 36 BMessenger messenger(listener); 37 38 uint8_t buffer[256]; 39 for (;;) { 40 ssize_t s = source->Read(&buffer, sizeof(buffer)); 41 if (s <= 0) 42 return; 43 44 sink->Write(buffer, s); 45 position += s; 46 47 BMessage msg(kMsgProgress); 48 msg.AddInt32("pos", position); 49 msg.AddInt32("size", sourceSize); 50 msg.AddString("info", "Sending" B_UTF8_ELLIPSIS); 51 messenger.SendMessage(&msg); 52 53 //usleep(20000); 54 } 55} 56 57 58RawSender::~RawSender() 59{ 60} 61 62 63bool 64RawSender::BytesReceived(const uint8_t* data, size_t length) 65{ 66 // Nothing to do with received bytes, this protocol has no kind of 67 // acknowledgement from remote side. 68 return true; 69} 70