Jump to content


Photo

SixthSense [Alpha]


  • Please log in to reply
12 replies to this topic

#1 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 20 February 2012 - 06:36 PM

Hello after a long time without any project sign of life ;)

There is Alpha version of SixthSense shared plugin system. This topic content will be updated soon after a couple of days, but now i want to show You guys, what it's now.

* How it works?
Whole system is splitted into two modules:
- Server (that manage all plugins loaded to it, including: calling plugins functions, executing queries (available in beta version))
- Plugin/Client (that contain registered plugin functions and allow server to execute them)

* How to use it?
- Server module is a single dll to load into application (win/c++ or GM (GM version available in beta)). Server can load or unload plugins, call their functions, share resources between many plugins. In alpha version server can be used in c++ applications, but in beta will be released GM version of this dll.
- Plugin module as a developer-made dll using SxPlugin template (and SxClient library) written in c++. Plugin can register or unregister special developer-made functions hidden in plugin dll, call functions of other plugins loaded to server to share data. Developer can use plugin template to prepare basic plugin code project and use it to make plugin dll.

* How it share data between plugins and server?
When client (plugin) or application call some plugin function, can send data in special universal variables (that hold pointer, number and strings) and return value to plugin/application that call function. This allow to make data loader plugin, that hold raw data, then make a plugin to access this data and prepare some asset from this (or do whatever it want), for example: GM call asset loader to load image, then call graphics plugin to use it image as texture, make model and draw it.

* How can i do?
If you are dll developer, you can start to implement plugin module in your best dll and be a part of new GM extending system, that allow every developer to use it's plugin dll with any other plugins!
Any question you can put in this topic :)

* What startup plugins will be released with final version of SixthSense?
- Ether (network connections and xml manager)
- XeAudiere (sound player)
- Photon (Xenon Core 2 graphics module that allow to make amazing graphics in your game)
- Vidi (online application validation and global user profile system)

And will be great to see those dlls available on SixthSense platform:
- GMogre3D
- Extreme Physics
- 39dll
- GMnewton
- Fmod Sound System Engine
- Download Manager

* SDK alpha version with plugin example:
http://psichix.gmclan.org/download.php?file=SixthSenseSDK_Alpha.zip

* Promo wallpaper:
http://gmclan.org/uploader/1105/SixthSense_Wallpaper.png

* Known bugs:
- none

* Update 23-02-2012:
- combined a server and client modules, so there is no more dll for server in C++ version, and plugin can be now a client and server for other plugins, so it can load plugins that need to use.
- fixed bug with returning values from plugin functions.
- GM version added
- documentations for C++ and GM versions added (english language)
- SDK structure is reorganized (there is easy to find and use a Visual C++ 2010 plugin and host templates and GM server dll)

Edited by PsichiX, 03 April 2012 - 09:28 AM.

  • 0

#2 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 23 February 2012 - 10:55 AM

* Update 23-02-2012:
- combined a server and client modules, so there is no more dll for server in C++ version, and plugin can be now a client and server for other plugins, so it can load plugins that need to use.
- fixed bug with returning values from plugin functions.
- GM version added
- documentations for C++ and GM versions added (english language)
- SDK structure is reorganized (there is easy to find and use a Visual C++ 2010 plugin and host templates and GM server dll)

http://psichix.gmcla...seSDK_Alpha.zip

Edited by PsichiX, 23 February 2012 - 10:59 AM.

  • 0

#3 Saijee

Saijee

    GMC Member

  • GMC Member
  • 2255 posts
  • Version:Unknown

Posted 27 February 2012 - 05:43 AM

What does this do?
  • 0

#4 icuurd12b42

icuurd12b42

    Self Formed Sentient

  • Global Moderators
  • 14390 posts
  • Version:GM:Studio

Posted 27 February 2012 - 06:53 AM

GMModelEx could also be a candidate for that, possibly GM3dPartSys. This sounds a lot like my shelved GMTools system. I'm glad someone is taking this on.

You did not reply to the PM I sent. But I'll be happy to provide some feedback.
  • 0

#5 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 03 April 2012 - 08:59 AM

new version on the way, what in it new? Callbacks (application functions calling in plugins), full implementation GM version and .NET (yes, you can write plugins and use it in C++, C #, VB, or any .NET language). We'll see how it will be with Java, if I can hook beneath it. It will be really cross-language library :D

Edited by PsichiX, 03 April 2012 - 09:03 AM.

  • 0

#6 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 06 April 2012 - 10:51 AM

Plugins test in C#:
http://dl.dropbox.com/u/9759049/TestAppCsharp.zip

Next step will be plugin written in C# and running under C++ and GM.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SxPortable;

namespace TestAppCsharp
{
    class Program
    {
        static UniVar CbMsgYes(Server.Callback cb, UniVar[] args)
        {
            return new UniVar("yes");
        }

        static UniVar CbMsgNo(Server.Callback cb, UniVar[] args)
        {
            return new UniVar("no");
        }

        static void Main(string[] args)
        {
            Server.Use().RegisterCallback("msgyes").BindDelegate(new Server.Callback.Deleg(CbMsgYes));
            Server.Use().RegisterCallback("msgno").BindDelegate(new Server.Callback.Deleg(CbMsgNo));

            Console.WriteLine("plug in: {0}",
                Server.Use().PlugIn("SxPlugin.dll")
                );

            Console.WriteLine("result: {0}",
                Server.Use().Call("MsgBoxPlugin", "MsgBox", new UniVar("Hello World!"), new UniVar("MsgBox"))
                );

            Console.WriteLine("plug out: {0}",
                Server.Use().PlugOut("SxPlugin.dll")
                );

            Server.Use().UnregisterCallback("msgyes");
            Server.Use().UnregisterCallback("msgno");
            
            Server.Destroy();
            
            Console.ReadLine();
        }
    }
}

Edited by PsichiX, 06 April 2012 - 11:09 AM.

  • 0

#7 Primoz128

Primoz128

    GMC Member

  • GMC Member
  • 277 posts
  • Version:GM:Studio

Posted 08 April 2012 - 08:41 PM

Plugins test in C#:
http://dl.dropbox.com/u/9759049/TestAppCsharp.zip

Next step will be plugin written in C# and running under C++ and GM.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SxPortable;

namespace TestAppCsharp
{
    class Program
    {
        static UniVar CbMsgYes(Server.Callback cb, UniVar[] args)
        {
            return new UniVar("yes");
        }

        static UniVar CbMsgNo(Server.Callback cb, UniVar[] args)
        {
            return new UniVar("no");
        }

        static void Main(string[] args)
        {
            Server.Use().RegisterCallback("msgyes").BindDelegate(new Server.Callback.Deleg(CbMsgYes));
            Server.Use().RegisterCallback("msgno").BindDelegate(new Server.Callback.Deleg(CbMsgNo));

            Console.WriteLine("plug in: {0}",
                Server.Use().PlugIn("SxPlugin.dll")
                );

            Console.WriteLine("result: {0}",
                Server.Use().Call("MsgBoxPlugin", "MsgBox", new UniVar("Hello World!"), new UniVar("MsgBox"))
                );

            Console.WriteLine("plug out: {0}",
                Server.Use().PlugOut("SxPlugin.dll")
                );

            Server.Use().UnregisterCallback("msgyes");
            Server.Use().UnregisterCallback("msgno");
            
            Server.Destroy();
            
            Console.ReadLine();
        }
    }
}


What i on the quick read that this is... this is better gmapi ? o.O...
  • 0

#8 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 10 April 2012 - 10:12 AM

somehow it is ;)
main goal with this system is to make a cross-platform /cross-language extensions easy to use and behave in the same way everywhere where they are used.
so on that way it is better than gmapi, but they are not allow us to call GM functions inside plugins - they only can extend features of applications.

BTW. i have a c# plugins prototype, so on days there will be a beta version of system with complete support for C++, .NET and GM :)

Edited by PsichiX, 10 April 2012 - 10:17 AM.

  • 0

#9 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 16 April 2012 - 08:42 AM

i have complete .NET plugin runner, today i will make SDK for new version of SixthSense, and tomorrow i will publish it with plugins written in c++ and c# (btw, c# plugins are easier to write ;D)
  • 0

#10 icuurd12b42

icuurd12b42

    Self Formed Sentient

  • Global Moderators
  • 14390 posts
  • Version:GM:Studio

Posted 16 April 2012 - 05:24 PM

I just updated the source c++ file in the zip for FMOD... you can grab it and mod it to your liking.
  • 0

#11 PsichiX

PsichiX

    GMC Member

  • GMC Member
  • 358 posts

Posted 17 April 2012 - 08:22 AM

0.9.0.0 version SDK and website are ready:
http://6s.psichix.com/

@icuurd12b42: thanks, i will take a look at it :)

Edited by PsichiX, 17 April 2012 - 08:23 AM.

  • 0

#12 DanRedux

DanRedux

    GMC Member

  • GMC Member
  • 1332 posts
  • Version:GM:Studio

Posted 17 April 2012 - 08:46 AM

I, like a lot of people, have no clue what this does.

It SOUNDS like it will hook in to, and accept, a DLL written in any supported language, sort of like a translator? It will take a GM call and re-route it to the DLL function?

If so, I see no benefit to it... What problem does it solve?
  • 0

#13 icuurd12b42

icuurd12b42

    Self Formed Sentient

  • Global Moderators
  • 14390 posts
  • Version:GM:Studio

Posted 17 April 2012 - 05:58 PM

I, like a lot of people, have no clue what this does.

It SOUNDS like it will hook in to, and accept, a DLL written in any supported language, sort of like a translator? It will take a GM call and re-route it to the DLL function?

If so, I see no benefit to it... What problem does it solve?


Provides a common interface to plugins that can be defined on the fly. The interface is accessible from within a plugin and within GML, so other plugin can ask for another plugin be loaded and do work with it. For example, I could write a 3d model loader plugin that can read in d3d and obj files... and I could write another plugin to do 3d model morphing like skeletal animation on the data loaded by the first plugin.
  • 0




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users