From a259ec553a1d685ebb976ec34eaaf700d24ee0c4 Mon Sep 17 00:00:00 2001 From: Pixel Date: Mon, 29 Oct 2001 16:23:12 +0000 Subject: More tasking implementation --- include/CopyJob.h | 20 ++++++++++++++++++++ include/Exceptions.h | 1 + include/Handle.h | 6 +++--- include/Makefile.am | 3 +-- include/ReadJob.h | 20 ++++++++++++++++++++ lib/CopyJob.cc | 15 +++++++++++++++ lib/Handle.cc | 12 ++++++++++++ lib/Makefile.am | 2 +- lib/ReadJob.cc | 16 ++++++++++++++++ 9 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 include/ReadJob.h create mode 100644 lib/ReadJob.cc diff --git a/include/CopyJob.h b/include/CopyJob.h index e69de29..69eb088 100644 --- a/include/CopyJob.h +++ b/include/CopyJob.h @@ -0,0 +1,20 @@ +#ifndef __COPYJOB_H__ +#define __COPYJOB_H__ +#ifdef __cplusplus + +#include +#include + +class CopyJob : public Task { + public: + CopyJob(Handle &, Handle &); + virtual ~CopyJob(); + virtual int Do(); + private: + Handle s, d; +}; + +#else +#error This only works with a C++ compiler +#endif +#endif diff --git a/include/Exceptions.h b/include/Exceptions.h index 16737e0..87ba6d1 100644 --- a/include/Exceptions.h +++ b/include/Exceptions.h @@ -5,6 +5,7 @@ #include #include #include +#include /* * Gère les exceptions du système. Le programme principal devrait tenter diff --git a/include/Handle.h b/include/Handle.h index 3cb16f1..1541bbe 100644 --- a/include/Handle.h +++ b/include/Handle.h @@ -33,9 +33,9 @@ class Handle : public Base { bool IsClosed(void); bool IsNonBlock(void); void SetNonBlock(void); - virtual bool CanRead() = 0; - virtual bool CanWrite() = 0; - virtual String GetName() = 0; + virtual bool CanRead(); + virtual bool CanWrite(); + virtual String GetName(); protected: Handle(int h); int GetHandle(); diff --git a/include/Makefile.am b/include/Makefile.am index 4175224..245640d 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,5 +1,4 @@ include_HEADERS = \ Exceptions.h Handle.h String.h Output.h Socket.h HttpServ.h Variables.h Menu.h \ Action.h Message.h Form.h Confirm.h Table.h IRC.h Task.h Buffer.h General.h \ -Misc.h - +CopyJob.h ReadJob.h diff --git a/include/ReadJob.h b/include/ReadJob.h new file mode 100644 index 0000000..19009a6 --- /dev/null +++ b/include/ReadJob.h @@ -0,0 +1,20 @@ +#ifndef __READJOB_H__ +#define __READJOB_H__ +#ifdef __cplusplus + +#include +#include + +class ReadJob : public Task { + public: + ReadJob(Handle &, Handle &); + virtual ~ReadJob(); + virtual int Do(); + private: + Handle s, d; +}; + +#else +#error This only works with a C++ compiler +#endif +#endif diff --git a/lib/CopyJob.cc b/lib/CopyJob.cc index e69de29..7dccbc5 100644 --- a/lib/CopyJob.cc +++ b/lib/CopyJob.cc @@ -0,0 +1,15 @@ +#include "CopyJob.h" + +CopyJob::CopyJob(Handle & as, Handle & ad) : s(as), d(ad) { } + +CopyJob::~CopyJob() { } + +int CopyJob::Do() { + int r; + char buffer[4096]; + + while (!s.IsClosed()) { + r = s.read(buffer, 4096); + d.write(buffer, r); + } +} diff --git a/lib/Handle.cc b/lib/Handle.cc index c3efc55..0f1791e 100644 --- a/lib/Handle.cc +++ b/lib/Handle.cc @@ -138,3 +138,15 @@ void Handle::close() { closed = 1; } + +bool Handle::CanRead(void) { + return false; +} + +bool Handle::CanWrite(void) { + return false; +} + +String Handle::GetName(void) { + return _("Bare Handle - should not happend"); +} diff --git a/lib/Makefile.am b/lib/Makefile.am index 1135e12..01cef95 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -8,6 +8,6 @@ lib_LTLIBRARIES = libBaltisot.la libBaltisot_la_SOURCES = Exceptions.cc Handle.cc Output.cc String.cc\ Socket.cc Input.cc HttpServ.cc Variables.cc Action.cc Menu.cc Message.cc\ Form.cc Confirm.cc Table.cc checkargs.c datecalc.c IRC.cc Task.cc Buffer.cc\ - Misc.cc + CopyJob.cc ReadJob.cc libBaltisot_la_LDFLAGS = -release $(Baltisot_VERSION_INFO) diff --git a/lib/ReadJob.cc b/lib/ReadJob.cc new file mode 100644 index 0000000..9f4e084 --- /dev/null +++ b/lib/ReadJob.cc @@ -0,0 +1,16 @@ +#include "ReadJob.h" + +ReadJob::ReadJob(Handle & as, Handle & ad) : s(as), d(ad) { } + +ReadJob::~ReadJob() { } + +int ReadJob::Do() { + int r; + String buff; + + while (!s.IsClosed()) { + buff << s; + buff >> d; + if (buff == "") return TASK_DONE; + } +} -- cgit v1.2.3