99 lines
3.5 KiB
Plaintext
99 lines
3.5 KiB
Plaintext
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: RamDisk\Control\Utilities.sg
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
|
||
|
using Microsoft.SingSharp;
|
||
|
using Microsoft.SingSharp.Reflection;
|
||
|
|
||
|
using Microsoft.Singularity.Applications;
|
||
|
using Microsoft.Singularity.Channels;
|
||
|
using Microsoft.Singularity.Configuration;
|
||
|
using Microsoft.Singularity.Directory;
|
||
|
using Microsoft.Singularity.Io;
|
||
|
|
||
|
using Microsoft.Singularity.Services.RamDisk.Contracts;
|
||
|
|
||
|
namespace Microsoft.Singularity.Services.RamDisk.RamDiskControl
|
||
|
{
|
||
|
internal class Utilities
|
||
|
{
|
||
|
internal static RamDiskControlContract.Imp ConnectToManager()
|
||
|
{
|
||
|
DirectoryServiceContract.Imp! rootds = DirectoryService.NewClientEndpoint();
|
||
|
|
||
|
try {
|
||
|
RamDiskControlContract.Imp! service_imp;
|
||
|
RamDiskControlContract.Exp! service_exp;
|
||
|
RamDiskControlContract.NewChannel(out service_imp, out service_exp);
|
||
|
|
||
|
ErrorCode error;
|
||
|
if (!SdsUtils.Bind(RamDiskControlContract.ManagerControlPath, rootds, service_exp, out error)) {
|
||
|
Console.WriteLine("Failed to connect to service path '{0}'. Error: {1}",
|
||
|
RamDiskControlContract.ManagerControlPath,
|
||
|
SdsUtils.ErrorCodeToString(error));
|
||
|
delete service_imp;
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
service_imp.RecvSuccess();
|
||
|
return service_imp;
|
||
|
}
|
||
|
finally {
|
||
|
delete rootds;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal static void DisplayError(RamDiskContractErrorCode e)
|
||
|
{
|
||
|
string message = "unknown";
|
||
|
switch (e) {
|
||
|
case RamDiskContractErrorCode.NoError:
|
||
|
message = "no error";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.AccessDenied:
|
||
|
message = "directory access denied";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.CapacityReached:
|
||
|
message = "capacity of directory resources reached";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.InsufficientResources:
|
||
|
message = "insufficient resources";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.DirectoryFull:
|
||
|
case RamDiskContractErrorCode.IsOpen:
|
||
|
message = "disk in use";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.DoesNotExist:
|
||
|
message = "device does not exist";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.OutOfMemory:
|
||
|
message = "out of memory";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.IsInUse:
|
||
|
message = "disk is still in use - use -f to force destroy";
|
||
|
break;
|
||
|
case RamDiskContractErrorCode.InternalError:
|
||
|
message = "internal error";
|
||
|
break;
|
||
|
}
|
||
|
Console.WriteLine("Failed: {0}.", message);
|
||
|
}
|
||
|
|
||
|
internal static void DisplayChannelClosedError()
|
||
|
{
|
||
|
Console.WriteLine(
|
||
|
"Failed: Channel to RAM disk client manager closed unexpectedly."
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|