Есть ли способ поставить в очередь вызов функции и ее параметры для последующего вызова? - PullRequest
0 голосов
/ 26 декабря 2018

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

Привет!Я работаю над новой игрой (Unity C #), в которой игрок проходит через зоны с небольшим приемом.Игрок находит кодовые слова и вводит их в поле, чтобы разблокировать контент.В то же время я хочу записать запущенные кодовые слова для каждого пользователя.Проблема в том, что соединение может быть потеряно во время сеанса.Мне удавалось ставить в очередь функции каждый раз, когда игрок вводит кодовое слово, когда он отключен, но после получения приема игрок снова отправляет только последнюю запись.Помощь очень ценится!

public void NotConnected()
{
        CallsOnQueue.Add( () => StartCoroutine(TestCodeword())); 
}

public void BackOnline()
{
        if (CallsOnQueue.Count == 0)
        {
            LookforCodewordInDB();
        }    
        else
        {
            foreach (Action item in Callsonqueue)
                StartCoroutine(TestCodeword(teamname, codeword, city, date));

        }
        Callsonqueue.Clear();
}

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Мне кажется, что ваш код в порядке, за исключением цикла foreach.

Вместо того, чтобы вызывать сохраненное действие, вы запускаете одну и ту же сопрограмму для каждого элемента!

Измените свой кодк этому

foreach (Action item in Callsonqueue)
                item.Invoke():
0 голосов
/ 26 декабря 2018

Я думаю, что наиболее разумный подход - сохранить функцию как объект в базе данных, а затем извлечь ее.

public class MyFunction{
     string FuncionName { get; set; }
     public string Param1 { get; set; }
     public string Param2 { get; set; }
     //more params
}

, затем вы можете использовать оператор сравнения для вызова соответствующего метода.

switch (storedFunction.FunctionName)
{
     case "myFunction":
         myFunction();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...