/*
C#: The Complete Reference
by Herbert Schildt
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// An enhanced cipher component that maintains a log file.
using CipherLib; // import CipherComp's namespace
using System;
using System.ComponentModel;
using System.IO;
namespace CipherLib {
// An Cipher component that maintains a log file.
class CipherComp : Component {
static int useID = 0;
int id; // instance id
bool isDisposed; // true if component is disposed.
FileStream log;
// Constructor
public CipherComp() {
isDisposed = false; // component not disposed
try {
log = new FileStream("CipherLog" + useID, FileMode.Create);
id = useID;
useID++;
} catch (FileNotFoundException exc) {
Console.WriteLine(exc);
log = null;
}
}
// Destructor
~CipherComp() {
Console.WriteLine("Destructor for component "
+ id);
Dispose(false);
}
// Encode the file. Return and store result.
public string Encode(string msg) {
string temp = "";
for(int i=0;i < msg.Length; i++)
temp += (char) (msg[i] + 1);
// Store in log file.
for(int i=0; i < temp.Length; i++)
log.WriteByte((byte) temp[i]);
return temp;
}
// Decode the message. Return and store result.
public string Decode(string msg) {
string temp = "";
for(int i=0; i < msg.Length; i++)
temp += (char) (msg[i] - 1);
// Store in log file.
for(int i=0; i < temp.Length; i++)
log.WriteByte((byte) temp[i]);
return temp;
}
protected override void Dispose(bool dispAll) {
Console.WriteLine("Dispose(" + dispAll +
") for component " + id);
if(!isDisposed) {
if(dispAll) {
Console.WriteLine("Closing file for " +
"component " + id);
log.Close(); // close encoded file
isDisposed = true;
}
// no unmanaged resources to release
base.Dispose(dispAll);
}
}
}
}
// Another client that uses CipherComp.
public class CipherCompClient1 {
public static void Main() {
CipherComp cc = new CipherComp();
string text = "Testing";
string ciphertext = cc.Encode(text);
Console.WriteLine(ciphertext);
string plaintext = cc.Decode(ciphertext);
Console.WriteLine(plaintext);
text = "Components are powerful.";
ciphertext = cc.Encode(text);
Console.WriteLine(ciphertext);
plaintext = cc.Decode(ciphertext);
Console.WriteLine(plaintext);
cc.Dispose(); // free resources
}
}