C# UnitSync bindings

C# UnitSync bindings

Discuss the source code and development of Spring Engine in general from a technical point of view. Patches go here too.

Moderator: Moderators

Post Reply
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

C# UnitSync bindings

Post by AF »

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?
User avatar
Licho
Zero-K Developer
Posts: 3803
Joined: 19 May 2006, 19:13

Post by Licho »

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
  }
}
Post Reply

Return to “Engine”