Войти
Urho3DФорумURHOSHARP

Скрипт на сишарпе и межпроцессное взаимодействие (2 стр)

Страницы: 1 2
#15
18:45, 6 дек. 2016

У меня вобще отчаянная идея появилась компилировать скрипт в отдельное приложение, запускать его и обмениваться данными по сети))


#16
18:50, 6 дек. 2016

я из всего сказанного не понял

нужно загружать и выгружать какой-то скрипт
почему именно скрипт и почему на с#. Если речь идет об инструкциях - они могут быть в чем угодно, хоть на морзе

или речь идет о полном произволе содержимого скрипта?

#17
18:56, 6 дек. 2016

Компилировать, загружать и выгружать на лету без перезапуска программы мне нужно, чтобы клиент не терял соединение с сервером.

> почему на с#
хочется :(

#18
19:02, 6 дек. 2016
появилась компилировать скрипт в отдельное приложение, запускать его
почему бы и нет, компилируй, отправляй, клиент выгрузит модуль и подгрузит либку. А в ином случае получится ресурсоемко
зы и небезопасно
#19
19:26, 6 дек. 2016

Глянь на досуге DynamicProxy, лично не знаком, но наслышан...

и узнал о нем в комментах, недавней статьи - что само небезинтересно https://habrahabr.ru/post/316238/

#20
23:19, 6 дек. 2016

Zamir
Castle.DynamicProxy? Он вообще то для динамической реализации интерфейсов и классов, раньше его активно использовали для юнит тестов. Он плохо сюда подходит.
Я раньше игрался с https://github.com/chkn/AluminumLua - там чувак придумал lua компилировать за счёт expression tree. Но выгружать их не получиться без AppDomain.

Я делал так:

            _domain = AppDomain.CreateDomain("temp");
            var a = _domain.Load(GetType().Assembly.GetName());

            _agent = (Agent) a.CreateInstance(typeof (Agent).FullName);
            _agent.ExternalWindow = windowsFormsHost;
            _agent.AssetFolder = _project.DataFolder;
            _agent.LaunchApplication();

И сам агент:

    public class Agent : MarshalByRefObject, IEditorScene
    {
        private EditorApplication _application;

        public string AssetFolder;
        public IntPtr ExternalWindow;

        public bool MoveForward
        {
            get { return _application.MoveForward; }
            set { _application.MoveForward = value; }
        }

        public bool MoveBackwards
        {
            get { return _application.MoveBackwards; }
            set { _application.MoveBackwards = value; }
        }

        public bool MoveLeft
        {
            get { return _application.MoveLeft; }
            set { _application.MoveLeft = value; }
        }

        public bool MoveRight
        {
            get { return _application.MoveRight; }
            set { _application.MoveRight = value; }
        }

        public void ResetScene()
        {
            ((IEditorScene) _application)?.ResetScene();
        }

        public void LoadScene(string sceneName)
        {
            _application?.LoadScene(sceneName);
        }

        public string GetSceneName()
        {
            return ((IEditorScene) _application)?.GetSceneName();
        }

        public void Exit()
        {
            _application?.Exit();
        }

        public void LaunchApplication()
        {
            var options = new ApplicationOptions(AssetFolder) {ExternalWindow = ExternalWindow, LimitFps = true};
            _application = new EditorApplication(options);
            _application.Engine.MaxFps = 60;
            _application.Run();
        }
    }

Всё это было в рамках проверки идеи, до ума я не довёл. Но работал базовый функционал.

#21
9:09, 7 дек. 2016

GLoom Как здоровье?  Castle.DynamicProxy?  Ага...  Он плохо сюда подходит. А я и не говорил что ему это подойдет, но надеялся)) Я в шарпе год, от силы, единственное что у меня пока есть - огромная симпатия к нему)

Тема, которую поднял 1vanK, сама по себе, очень интересная, для меня (по крайней мере). И интересно следить, а следить и при этом чего нибудь не ляпнуть - тяжелая ноша) Вы уж простите...

Страницы: 1 2
Urho3DФорумURHOSHARP

Тема в архиве.