📄 fileserversession.cpp
字号:
/*
* ==============================================================================
* Name :FileServerSession.cpp
* Part of : clientserversync
* Interface :
* Description :
* Version :
* ==============================================================================
*/
// INCLUDE FILES
#include <e32math.h>
#include <e32cmn.h>
#include <e32des8.h>
#include <aknnotewrappers.h>
#include "ClientServerCommon.h"
#include "FileServerSession.h"
#include "CSSync.rsg"
_LIT(KDisplayTxt,"Enter Filename:");
_LIT(KFileNamePath, "c:\\private\\");
// FUNCTION PROTOTYPES
static TInt StartServer();
static TInt CreateServerProcess();
// ========================= MEMBER FUNCTIONS ==================================
// -----------------------------------------------------------------------------
// RFileServerSession::RFileServerSession()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
RFileServerSession::RFileServerSession()
: RSessionBase()
{
iDisplayTxt.Copy(KDisplayTxt);
}
// -----------------------------------------------------------------------------
// RFileServerSession::Connect()
// Connects to the server and create a session.
// -----------------------------------------------------------------------------
//
TInt RFileServerSession::Connect()
{
TInt error = ::StartServer();
if ( KErrNone == error )
{
error = CreateSession( KFileServerName,
Version(),
KDefaultMessageSlots );
}
return error;
}
// -----------------------------------------------------------------------------
// RFileServerSession::Version()
// Gets the version number.
// -----------------------------------------------------------------------------
//
TVersion RFileServerSession::Version() const
{
return( TVersion( KFileServMajorVersionNumber,
KFileServMinorVersionNumber,
KFileServBuildVersionNumber ) );
}
// ============================= OTHER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// StartServer()
// Starts the server if it is not already running
// -----------------------------------------------------------------------------
//
static TInt StartServer()
{
TInt result;
TFindServer findFileServer( KFileServerName );
TFullName name;
result = findFileServer.Next( name );
if ( result == KErrNone )
{
// Server already running
return KErrNone;
}
RSemaphore semaphore;
result = semaphore.CreateGlobal( KFileServerSemaphoreName, 0 );
if ( result != KErrNone )
{
return result;
}
result = CreateServerProcess();
if ( result != KErrNone )
{
return result;
}
semaphore.Wait();
semaphore.Close();
return KErrNone;
}
// -----------------------------------------------------------------------------
// CreateServerProcess()
// Creates a server process
// -----------------------------------------------------------------------------
//
static TInt CreateServerProcess()
{
TInt result;
const TUidType serverUid( KNullUid, KNullUid, KServerUid3 );
RProcess server;
_LIT( KStrEmpty,"" );
result = server.Create( KFileServerFilename, KStrEmpty, serverUid );
if ( result != KErrNone )
{
return result;
}
server.Resume();
server.Close();
return KErrNone;
}
// -----------------------------------------------------------------------------
// RequestFileCreation()
// Sends a filname to server for creation
// -----------------------------------------------------------------------------
//
void RFileServerSession::RequestFileCreation()
{
iFileNameCreate.Zero();
iFileName.Zero();
iFileNameCreate.Copy(KFileNamePath);
iDlg = new( ELeave ) CAknTextQueryDialog( iFileName, iDisplayTxt );
iDlg->PrepareLC( R_DEMO_DATA_QUERY );
iDlg->SetMaxLength(10);
if (iDlg->RunLD())
{
iFileNameCreate.Append(iFileName);
iIpcArgsCreate.Set(0 ,&iFileNameCreate);
SendReceive( EFileCreation, iIpcArgsCreate);
CAknInformationNote* lNote = new (ELeave) CAknInformationNote;
lNote->ExecuteLD(iFileNameCreate);
}
}
// -----------------------------------------------------------------------------
// RequestFileDeletion()
// Sends a filname to server for deletion
// -----------------------------------------------------------------------------
//
void RFileServerSession::RequestFileDeletion()
{
iFileNameDelete.Zero();
iFileName.Zero();
iFileNameDelete.Copy(KFileNamePath);
iDlg = new( ELeave ) CAknTextQueryDialog( iFileName, iDisplayTxt );
iDlg->PrepareLC( R_DEMO_DATA_QUERY );
iDlg->SetMaxLength(10);
if (iDlg->RunLD())
{
iFileNameDelete.Append(iFileName);
iIpcArgsDelete.Set(0 ,&iFileNameDelete);
SendReceive( EFileDeletion, iIpcArgsDelete);
CAknInformationNote* lNote = new (ELeave) CAknInformationNote;
lNote->ExecuteLD(iFileNameDelete);
}
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -