using System;
using System.Collections.Generic;
using IEC61850.Client;
using IEC61850.Common;
using System.IO;
namespace files
{
///
/// This example connects to an IEC 61850 device, list the available files, and then
/// tries to read the file "IEDSERVER.BIN" from the server.
///
class MainClass
{
public static void printFiles (IedConnection con, string prefix, string parent)
{
bool moreFollows = false;
List files = con.GetFileDirectoryEx (parent, null, out moreFollows);
foreach (FileDirectoryEntry file in files) {
Console.WriteLine (prefix + file.GetFileName () + "\t" + file.GetFileSize () + "\t" +
MmsValue.MsTimeToDateTimeOffset (file.GetLastModified ()));
if (file.GetFileName ().EndsWith ("/")) {
printFiles (con, prefix + " ", parent + file.GetFileName ());
}
}
if (moreFollows)
Console.WriteLine("-- MORE FILE AVAILABLE --");
}
static bool getFileHandler (object parameter, byte[] data)
{
Console.WriteLine ("received " + data.Length + " bytes");
BinaryWriter binWriter = (BinaryWriter)parameter;
binWriter.Write (data);
return true;
}
public static void Main (string[] args)
{
IedConnection con = new IedConnection ();
string hostname;
if (args.Length > 0)
hostname = args [0];
else
hostname = "127.0.0.1";
Console.WriteLine ("Connect to " + hostname);
try {
con.Connect (hostname, 102);
Console.WriteLine ("Files in server root directory:");
List serverDirectory = con.GetServerDirectory (true);
foreach (string entry in serverDirectory) {
Console.WriteLine (entry);
}
Console.WriteLine ();
Console.WriteLine ("File directory tree at server:");
printFiles (con, "", "");
Console.WriteLine ();
string filename = "IEDSERVER.BIN";
Console.WriteLine ("Download file " + filename);
/* Download file from server and write it to a new local file */
FileStream fs = new FileStream (filename, FileMode.Create);
BinaryWriter w = new BinaryWriter (fs);
con.GetFile (filename, new IedConnection.GetFileHandler (getFileHandler), w);
fs.Close ();
con.Abort ();
} catch (IedConnectionException e) {
Console.WriteLine (e.Message);
}
// release all resources - do NOT use the object after this call!!
con.Dispose ();
}
}
}