hti/PC_Tools/DataGateway/INC/datagateway.h
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/PC_Tools/DataGateway/INC/datagateway.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*   This file contains the headers of DataGatewaySocketWriterThread,
+*	DataGatewaySocketReaderThread, DataGatewayClientThread and DataGateway
+*	classes.
+*/
+
+#ifndef DATAGATEWAY_H
+#define DATAGATEWAY_H
+
+#pragma warning ( disable : 4786 )
+
+#include "Socket.h"
+
+#include <windows.h>
+#include <process.h>
+
+#include "util.h"
+#include "common.h"
+#include "plugin.h"
+#include "safequeue.h"
+#include "thread.h"
+
+const int g_DataGatewayDefaultTcpIpPort       = 2000;
+const int g_DataGatewayDefaultTcpIpBufferSize = 8 * 1024;
+
+// Maximum time to wait
+extern long g_MaximumShutdownWaitTime;
+
+extern DWORD g_ErrorCode;
+
+//**********************************************************************************
+// Class DataGatewaySocketWriterThread
+//
+// This thread is used to read Data from outgoing queue 
+// and write it to Socket(connected to program using DataGateway)
+//**********************************************************************************
+
+class DataGatewaySocketWriterThread : public Thread<DataGatewaySocketWriterThread>
+{
+public:
+	DataGatewaySocketWriterThread(SafeQueue<Data*>* q, Socket* s);
+	/*
+	 * Main loop of thread
+	 * Reads Data from outgoing queue and writes it to Socket(connected to program using DataGateway)
+	 */
+	void Run();
+	void Stop();
+	bool IsRunning();
+
+private:
+	//outgoing queue
+	SafeQueue<Data*>* m_Queue;
+	//socket to which software using DataGateway is connected to
+	Socket* m_Socket;
+	bool m_Running;
+};
+
+//**********************************************************************************
+// Class DataGatewaySocketReaderThread
+//
+// This thread is used to read incoming bytes from Socket(connected to program using DataGateway)
+// which it then encapsulates into Data objects and forwards to outgoing queue
+//**********************************************************************************
+
+class DataGatewaySocketReaderThread : public Thread<DataGatewaySocketReaderThread>
+{
+public:
+	DataGatewaySocketReaderThread(SafeQueue<Data*>* q, long bufsize, Socket* s);
+	/*
+	 * Main loop of thread
+	 * Reads bytes from Socket(connected to program using DataGateway), encapsulates them to Data object and puts these to outgoing queue
+	 */
+	void Run();
+	void Stop();
+	bool IsRunning();
+
+private:
+	//incoming queue
+	SafeQueue<Data*>* m_Queue;
+	//socket to which software using DataGateway is connected to
+	Socket* m_Socket;
+	bool m_Running;
+	long m_TcpIpBufferSize;
+};
+
+//**********************************************************************************
+// Class DataGatewayClientThread
+//
+// This thread serves DataGateway's clients
+// Gets Data from incoming queue to which DataGatewaySocketReader has pushed it and forwards
+// them to CommChannelPlugin.
+// The thread also reads incoming data from CommChannelPlugin and forwards them to outgoing queue which
+// DataGatewaySocketWriter then reads
+//**********************************************************************************
+
+class DataGatewayClientThread : public Thread<DataGatewayClientThread>
+{
+public:
+	DataGatewayClientThread(Socket** s, long bufsize, const string& commchannel);
+	DataGatewayClientThread(Socket** s, long bufsize, CommChannelPlugin** f);
+	~DataGatewayClientThread();
+	/*
+	 * Main loop of thread
+	 * Gets Data from incoming queue to which DataGatewaySocketReader has pushed it and forwards
+	 * them to CommChannelPlugin.
+	 * Reads incoming data from CommChannelPlugin and forwards them to outgoing queue which
+	 * DataGatewaySocketWriter then reads
+	 */
+	void Run();
+	void Stop();
+
+private:
+	//incoming queue
+	SafeQueue<Data*> m_ReaderQueue;
+	//outgoing queue
+	SafeQueue<Data*> m_WriterQueue;
+	//used to read data from socket to incoming queue
+	DataGatewaySocketReaderThread m_ReaderThread;
+	//used to write data from outgoing queue to socket
+	DataGatewaySocketWriterThread m_WriterThread;
+	//Socket to which software using DataGateway is connected to
+	Socket** m_Socket;
+	//The CommChannelPlugin that is used in communication
+	CommChannelPlugin* m_CommChannelPlugin;
+	//determines which CommChannelPlugin is loaded
+	const string& m_CommChannelPluginName;
+	bool m_Running;
+	//This value states whether or not Communication Channel Plugin uses late initialization
+	bool m_CCLateInit;
+	//This value tells the buffer size that is used
+	long m_TcpIpBufferSize;
+};
+
+//**********************************************************************************
+// Class DataGateway
+//
+// This is the main thread of DataGateway
+//**********************************************************************************
+
+class DataGateway : public Thread<DataGateway>
+{
+public:
+	DataGateway(int port = g_DataGatewayDefaultTcpIpPort,
+		        long bufsize = g_DataGatewayDefaultTcpIpBufferSize,
+				const string& commchannel = "",
+				bool stayalive = false,
+				bool cclateinit = false);
+	void Run();
+	void Stop();
+	bool IsRunning();
+
+private:
+	//determines which CommChannelPlugin is loaded
+	const string& m_CommChannelPluginName;
+	//reference to CommChannelPlugin
+	CommChannelPlugin* m_CommChannelPlugin;
+	Event m_ShutdownEvent;
+	bool m_Running;
+	//tells whether DataGateway should stay alive after first client has disconnected
+	bool m_StayAlive;
+	//this value states whether or not Communication Channel Plugin uses late initialization
+	bool m_CCLateInit;
+	//the port which DataGateway listens for incoming connections
+    int m_TcpIpPort;
+	//buffer size used in communication
+    long m_TcpIpBufferSize;
+};
+
+#endif
+
+// End of the file
\ No newline at end of file