Ошибки януса + ссылка на код
От: AlexNek  
Дата: 16.04.11 16:01
Оценка:
Чтобы не забывать что я исправил в "своей" версии и заодно описать проблемы текущей решил создать новую ветку. Кроме описания ошибки, хочется указать где она проявляется и возможный путь исправления (как раз большие возможности для обсуждения)
Если путь исправления всех устроит, думается можно внести коррекцию и в текущую версию.
Не забывайте только изменять тему при описании ошибки.
avalon 1.0rc3 rev 380, zlib 1.2.3
Ошибка при создании нового сообщения
От: AlexNek  
Дата: 16.04.11 16:08
Оценка:
При создании нового сообщения (выбираем форум + кнопка в тоолбаре)
происходит вылет по индексу в param2[0] (Index was outside the bounds of the array)
        internal void SendEditor(ScintillaCommand cmd, int param1, byte[] param2)
        {
            // Initialize unmanged memory to hold the array.
            int size = Marshal.SizeOf(param2[0]) * param2.Length;

            IntPtr pnt = Marshal.AllocHGlobal(size);

            try
            {
                // Copy the array to unmanaged memory.
                Marshal.Copy(param2, 0, pnt, param2.Length);
                Win32Api.SendMessage(Handle, (uint)cmd, new IntPtr(param1), pnt);
            }
            finally
            {
                Marshal.FreeCoTaskMem(pnt);
            }
        }
avalon 1.0rc3 rev 380, zlib 1.2.3
Вариант1: Ошибка при создании нового сообщения
От: AlexNek  
Дата: 16.04.11 16:40
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN> При создании нового сообщения (выбираем форум + кнопка в тоолбаре)

AN> происходит вылет по индексу в param2[0] (Index was outside the bounds of the array)

Некоторые сложности в том что вылет происходит в ScintillaWrapper, поэтому пришлось добавить проект в сборку (точнее это я сделал еше раньше) и добавить автоматическое копирование в "Janus\Dependencies\scintilla\"

Теперь в этом файле
Janus\ScintillaWrapper\ScintillaEditor\Control\ScintillaEditor.cs


функция выглядит так
       internal void SendEditor(ScintillaCommand cmd, int param1, byte[] param2)
        {
            IntPtr pnt = IntPtr.Zero;
            if (param2 != null && param2.Length > 0)
            {
                // Initialize unmanged memory to hold the array.
                int size = Marshal.SizeOf(param2[0]) * param2.Length;

                pnt = Marshal.AllocHGlobal(size);
            }

            try
            {
                if (pnt != IntPtr.Zero)
                {
                    // Copy the array to unmanaged memory.
                    Marshal.Copy(param2, 0, pnt, param2.Length);
                }
                Win32Api.SendMessage(Handle, (uint)cmd, new IntPtr(param1), pnt);
            }
            finally
            {
                if (pnt != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(pnt);
                }
            }
        }
avalon 1.0rc3 rev 380, zlib 1.2.3
Ошибки/непонятка в редакторе нового сообщения показывается л
От: AlexNek  
Дата: 16.04.11 16:56
Оценка:
В редакторе нового сообщения показывается в поле "From" показывается логин пользователя, а не его имя.
К тому же все поля на английском "From", "Forum", "Subject"
До кода пока не добрался
avalon 1.0rc3 rev 380, zlib 1.2.3
Несоответствие сообщений статуса
От: AlexNek  
Дата: 16.04.11 17:34
Оценка:
Если отсылка сообщений успешно завершена, то отчего показаны ошибки при отсылке сообщений?
avalon 1.0rc3 rev 380, zlib 1.2.3
Ошибка: нет проверки на 0 ToHexString
От: AlexNek  
Дата: 16.04.11 21:05
Оценка:
При эксперименте с чтением всех пользователей вылетело по null тута
Janus\Janus-Common\Utils\SpecialByteConverter.cs

   public static class SpecialByteConverter
    {
        public static string ToHexString(this byte[] array)
...
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Несоответствие сообщений статуса
От: AlexNek  
Дата: 16.04.11 22:52
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN> Если отсылка сообщений успешно завершена, то отчего показаны ошибки при отсылке сообщений?



Кстати, для вопроизведении ошибки нужно просто ответить на удаленное сообщение.

Сама ошибка "прячется" в response, но проверить это "наверху" не получается пришлось сделать новое исключение SyncTroubleException и засылать его "наверх".
Janus\Rsdn\Janus.Rsdn\Synchronization\Tasks\PostMessagesSyncTask.cs


        protected override void ProcessResponse(
            ISyncContext context,
            PostRequest request,
            PostResponse response)
        {
            ClearOutbox(context, response.commitedIds);
            ClearRatesOutbox(context);

            context.StatisticsContainer.AddValue(JanusATInfo.OutboundMessagesStats, response.commitedIds.Length);
            context.StatisticsContainer.AddValue(JanusATInfo.FailedOutboundMessagesStats, response.exceptions.Length);
            context.StatisticsContainer.AddValue(JanusATInfo.OutboundRatesStats, request.rates.Length);

            Exception syncException = null;
            
            foreach (PostExceptionInfo ex in response.exceptions)
            {
                if (syncException == null)
                {
                    syncException = new SyncTroubleException();
                }

                SyncErrorInfo syncErrorInfo = new SyncErrorInfo(SyncErrorType.CriticalError, GetDisplayName(), ex.exception);
                syncException.Data.Add(syncErrorInfo, ex);
                context.TryAddSyncError(syncErrorInfo);
            }

            if (syncException != null)
            {
                throw syncException;
            }
        }
    }


Здесь исправлений немного больше чем надо, но студия лямбду также не любит.

Janus\Janus-Common\Synchronization\WebSvcSync\SimpleSyncTask.cs


        public void Sync(ISyncContext context, TSvc svc, int retries, ITaskIndicator indicator)
        {
...
            indicator.SetTaskState(SyncTaskState.Sync);
            try
            {
                context.CheckState();

                indicator.SetStatusText(SyncResources.IndicatorPrepareRequest);
                TRq rq = PrepareRequest(context);
                if (rq == null)
                {
                    return; // Nothing to do
                }

                context.CheckState();

                indicator.SetStatusText(SyncResources.IndicatorMakeRequest);

                Func<TRsp> requestMaker = delegate { return MakeRequest(context, svc, rq); };
                TRsp rsp = context.CallWithRetries(rq, GetDisplayName(), retries, requestMaker);

                context.CheckState();

                indicator.SetStatusText(SyncResources.IndicatorProcessResponse);
                SyncTaskState syncTaskState = SyncTaskState.Succeed;
                string finishText = SyncResources.IndicatorSuccessFinish;
                try
                {
                    ProcessResponse(context, rq, rsp);
                }
                catch (SyncTroubleException ex)
                {
                    syncTaskState = SyncTaskState.Failed;
                    finishText = SyncResources.IndicatorNotSuccessFinish;
                }

                context.CheckState();
                indicator.SetTaskState(syncTaskState);
                indicator.SetStatusText(finishText);
            }
            // Отмену пользователем не трактуем как ошибку и выкидываем наверх
            catch (UserCancelledException)
            {
                throw;
            }
            catch (Exception ex)
            {
...
            }
        }


Осталось еще исключение, но оно простое как валенок, да и содрано с UserCancelledException. Ну и еще надо добавить атрибут сериализации к SyncErrorInfo
avalon 1.0rc3 rev 380, zlib 1.2.3
Проблема: пользователи загружаются по 1000 за цикл
От: AlexNek  
Дата: 16.04.11 23:09
Оценка:
Добрался и до старой проблемы — пользователи загружаются по 1000 за цикл. Для 70 000 нужно много дней ждать. Пробовал только MakeRequest расширить из
Janus\Rsdn\Janus.Rsdn\Synchronization\Tasks\UsersSyncTask.cs

но похоже нужно еще и PrepareRequest менять для изменения lastRowVersion, а это уже на шару не получится.
Есть еще предложения?
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Ошибка: нет проверки на 0 ToHexString
От: AlexNek  
Дата: 16.04.11 23:09
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN> При эксперименте с чтением всех пользователей вылетело по null тута

AN>
Janus\Janus-Common\Utils\SpecialByteConverter.cs

AN>
   public static class SpecialByteConverter
AN>     {
AN>         public static string ToHexString(this byte[] array)
AN> ...


Это также исправил. Возможно лучше было иф инвертировать, но так уж с решарпером автоматом получилось. Может позже и поменяю.

       public static string ToHexString(this byte[] array)
        {
            if (array != null)
            {
                StringBuilder sb = new StringBuilder(array.Length * 2);
                foreach (byte b in array)
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, "{0:X2}", b);
                }

                return sb.ToString();
            }

            return string.Empty;
        }
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Ошибки/непонятка в редакторе нового сообщения показывает
От: ixor Россия  
Дата: 17.04.11 05:44
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>К тому же все поля на английском "From", "Forum", "Subject"


Тоже недавно заметил. Строковые ресурсы правятся в пару кликов (ресурсные файлы рядом). Засуну в общий патч по ресурсам.
Есть еще проблемка с отображением для 120dpi.
Я бы мог и это поправить, но тут у меня тоже вопрос. Студия очень старательно перекапывает весь файл при этом! И немного боязно такое отдавать разработчикам, потому что оно под XP 96dpi потом немного иначе выглядит.

AN>До кода пока не добрался
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re[2]: Ошибки/непонятка в редакторе нового сообщения показыв
От: AlexNek  
Дата: 17.04.11 08:32
Оценка:
Здравствуйте, ixor, Вы писали:

i> AN>К тому же все поля на английском "From", "Forum", "Subject"


i> Тоже недавно заметил. Строковые ресурсы правятся в пару кликов (ресурсные файлы рядом). Засуну в общий патч по ресурсам.

Пока не разбирался детально, но используемый подход по сравнению с multilang мне совсем не нравится. Да и есть еще две части не в ресурсах. Одна которую можно затащить в ресурсы как обычно и другая (атрибуты), которую будет непросто затащить.
i> Есть еще проблемка с отображением для 120dpi.
А у кого она может появится и как это менять для теста? Еще ни разу не сталкивался.
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Проблема: пользователи загружаются по 1000 за цикл
От: AlexNek  
Дата: 17.04.11 09:44
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN> Добрался и до старой проблемы — пользователи загружаются по 1000 за цикл. Для 70 000 нужно много дней ждать. Пробовал только MakeRequest расширить из

AN>
Janus\Rsdn\Janus.Rsdn\Synchronization\Tasks\UsersSyncTask.cs

AN> но похоже нужно еще и PrepareRequest менять для изменения lastRowVersion, а это уже на шару не получится.
AN> Есть еще предложения?
Сделал вроде повтор забора пользователей по 1000, но оказывает 1000 стоит прежде всего на стороне клиента. В настройках программы можно увеличить (попробовал до 10000) но тест не прошел после всех игр осталось загрузить только 500 человек (таблицу пока не хочется очищать)
Есть ли ограничения на сервере?
avalon 1.0rc3 rev 380, zlib 1.2.3
Re[2]: Проблема: пользователи загружаются по 1000 за цикл
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.04.11 10:10
Оценка:
Здравствуйте, AlexNek, Вы писали:

AN>Есть ли ограничения на сервере?


Есть.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[3]: Проблема: пользователи загружаются по 1000 за цикл
От: AlexNek  
Дата: 17.04.11 10:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK> AN>Есть ли ограничения на сервере?


AVK> Есть.

Известно сколько? И тогда в диалоге настроек должно быть нельзя набирать больше чем разрешено.
avalon 1.0rc3 rev 380, zlib 1.2.3
Re[4]: Проблема: пользователи загружаются по 1000 за цикл
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.04.11 10:31
Оценка:
Здравствуйте, AlexNek, Вы писали:

AVK>> Есть.

AN>Известно сколько?

(userRequest.maxOutput > 0 && userRequest.maxOutput < 1000) ? userRequest.maxOutput : 1000


AN> И тогда в диалоге настроек должно быть нельзя набирать больше чем разрешено.


Возможно
... << RSDN@Home 1.2.0 alpha 5 rev. 1495 on Windows 7 6.1.7601.65536>>
AVK Blog
Проблема: горячие клавиши для сообщений не работают
От: AlexNek  
Дата: 17.04.11 10:41
Оценка:
Не знаю, может только у меня так.
Но все горячие клавиши для сообщений не работают.
F3 — по описанию должна быть панель фильтра показываться
CtrlN — новое сообщение
и т.д.
avalon 1.0rc3 rev 380, zlib 1.2.3
Re: Проблема: горячие клавиши для сообщений не работают
От: _Raz_  
Дата: 17.04.11 10:48
Оценка: +1
Здравствуйте, AlexNek, Вы писали:

AN>Не знаю, может только у меня так.

AN>Но все горячие клавиши для сообщений не работают.
AN>F3 — по описанию должна быть панель фильтра показываться
AN>CtrlN — новое сообщение
AN>и т.д.
У меня работают. Но фокус ввода должен быть на списке тем или сообщении.
... << RSDN@Home 1.2.0 alpha 5 rev. 1497>>
Re[2]: Проблема: горячие клавиши для сообщений не работают
От: AlexNek  
Дата: 17.04.11 10:54
Оценка:
Здравствуйте, _Raz_, Вы писали:

R> AN>Не знаю, может только у меня так.

R> AN>Но все горячие клавиши для сообщений не работают.
R> AN>F3 — по описанию должна быть панель фильтра показываться
R> AN>CtrlN — новое сообщение
R> AN>и т.д.

R> У меня работают. Но фокус ввода должен быть на списке тем или сообщении.

Про фокус то понятно. Значит я чего то сломал. Ладно, все равно Trace добавлять надо.
avalon 1.0rc3 rev 380, zlib 1.2.3
Re[5]: Проблема: пользователи загружаются по 1000 за цикл
От: AlexNek  
Дата: 17.04.11 10:54
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK> AVK>> Есть.


AVK> AN>Известно сколько?


AVK>
AVK> (userRequest.maxOutput > 0 && userRequest.maxOutput < 1000) ? userRequest.maxOutput : 1000
AVK>

То есть фиксированного ограничения нет, но в любом случае не больше 1000?
avalon 1.0rc3 rev 380, zlib 1.2.3
Re[2]: Проблема: горячие клавиши для сообщений не работают
От: AlexNek  
Дата: 17.04.11 11:09
Оценка:
Здравствуйте, _Raz_, Вы писали:

R> AN>Не знаю, может только у меня так.

R> AN>Но все горячие клавиши для сообщений не работают.
R> AN>F3 — по описанию должна быть панель фильтра показываться
R> AN>CtrlN — новое сообщение
R> AN>и т.д.

R> У меня работают. Но фокус ввода должен быть на списке тем или сообщении.

Пока непонятка какая то, то бишь не должно работать.

Горячие клавиши определены в Rsdn.Janus.ForumDummyForm, а контрол в фокусе
Rsdn.Janus.JanusGrid, по парентам тоже нет поиска если все хорошо
       private static Control GetControlFromHandle(IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                return null;
            }

            return Control.FromHandle(handle) != null
                       ? Control.FromHandle(handle)
                       : GetControlFromHandle(GetParent(handle));
        }

Почему у Вас работает не могу понять
avalon 1.0rc3 rev 380, zlib 1.2.3
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.