C# UnitSync bindings
Moderator: Moderators
C# UnitSync bindings
Some people have dealt with spring and C# and I'm wondering, has anybody got C# bindings for UnitSync? Or shall I have to try and create my own?
This is from springie autohost
Code: Select all
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
namespace Springie
{
class UnitSync:IDisposable
{
public UnitSync():this(Directory.GetCurrentDirectory()) {}
string path;
public UnitSync(string path) {
this.path = path;
string opath = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(path);
if (Init(false, 0) != 1) throw new Exception("unitsync.dll init failed");
if (InitArchiveScanner() != 1) throw new Exception("unitsync.dll:InitArchiveScanner() failed");
//GetModList();
Directory.SetCurrentDirectory(opath);
}
public List<string> GetMapList()
{
string opath = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(path);
int mapCount = GetMapCount();
List<string> mapList = new List<string>(mapCount);
mapList.Clear();
for (int i = 0; i < mapCount; ++i) {
mapList.Add(GetMapName(i));
}
Directory.SetCurrentDirectory(opath);
return mapList;
}
public Dictionary<string, Spring.ModInfo> GetModList()
{
string opath = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(path);
int modCount = GetPrimaryModCount();
Dictionary<string, Spring.ModInfo> modList = new Dictionary<string, Spring.ModInfo>(modCount);
modList.Clear();
for (int i = 0; i < modCount; ++i) {
Spring.ModInfo mi = new Spring.ModInfo();
mi.Name = GetPrimaryModName(i);
mi.ArchiveName = GetPrimaryModArchive(i);
uint result = 0;
int acount = GetPrimaryModArchiveCount(i);
for (int x = 0; x < acount; ++x ) {
result += GetArchiveChecksum(GetPrimaryModArchiveList(x));
}
mi.Checksum = (int)result;
ReInit();
AddAllArchives(mi.ArchiveName);
mi.Sides = new String[GetSideCount()];
for (int x = 0; x < mi.Sides.Length; ++x) {
mi.Sides[x] = GetSideName(x);
}
modList.Add(GetPrimaryModName(i), mi);
}
Directory.SetCurrentDirectory(opath);
return modList;
}
private void ReInit() {
UnInit();
if (Init(false, 0) != 1) throw new Exception("unitsync.dll init failed");
if (InitArchiveScanner() != 1) throw new Exception("unitsync.dll:InitArchiveScanner() failed");
}
/*
// MAPS
*/
[DllImport("unitsync.dll")]
static extern int GetMapCount();
[DllImport("unitsync.dll")]
static extern string GetMapName(int index);
/*
// MODS
*/
[DllImport("unitsync.dll")]
static extern int GetPrimaryModCount();
[DllImport("unitsync.dll")]
static extern string GetPrimaryModName(int index);
[DllImport("unitsync.dll")]
static extern string GetPrimaryModArchive(int index);
[DllImport("unitsync.dll")]
static extern string GetPrimaryModArchiveList(int index);
[DllImport("unitsync.dll")]
static extern uint GetArchiveChecksum(string archive);
[DllImport("unitsync.dll")]
static extern int GetPrimaryModArchiveCount(int index);
[DllImport("unitsync.dll")]
static extern void AddAllArchives(string root);
/*
// SIDES
*/
[DllImport("unitsync.dll")]
static extern int GetSideCount();
[DllImport("unitsync.dll")]
static extern string GetSideName(int index);
/*
// INIT
*/
[DllImport("unitsync.dll")]
static extern int Init(bool isServer, int id);
[DllImport("unitsync.dll")]
static extern int InitArchiveScanner();
[DllImport("unitsync.dll")]
static extern void UnInit();
#region IDisposable Members
public void Dispose()
{
UnInit();
}
#endregion
}
}