Вопрос к тестировщикам
пока они бегают - прожка должна продолжать работать.
С двумя-то одинаковыми ИП в сети?
А чего мне удивлятся - это твои требования.
Опять придумываешь.
ехцептион катчится и давится
мда...
У меня как раз проблем нет.
Так что же ты тогда тут заливаешь об ошибках каких-то?
открой стредствами винды (не ДотНета) на каждом уровне по сокету
опять на ходу требования уточняем? :)
В любом случае, есть IDisposable и using ими можео гарантировать освобождение ресурсов.
С двумя-то одинаковыми ИП в сети?
------
И что такого? Ну сбоит сеть... фига... завод должен продолжать работать... пока не устранят...
Или до тебя только сейчас начинает доходить, что в этой ситуации вообще можно продолжать работать?
Так что же ты
-----
Ну Я вообще-то тебя спросил и ты ответил - будешь вылизывать сокет и клиентский код.
Ну а в ZigBee на возможность доставить команду на устройство сокет, конечно, влияет, но вот не гарантирует что доставленное будет принято.
Ну да ладно - для тебя, сидящего на сокете и не интересующегося окружением, это слишком сложно...
опять на ходу требования уточняем? :)
-----
Ну а что делать - ты же всегда закладываешься на самый благоприятный вариант, а в жизни оно немного по-другому...
есть IDisposable и using ими можео гарантировать освобождение ресурсов.
-----
Правда? У сокетного (не ДотНет, а ВинАпи) хендла есть IDisposable?
Может у него еще и IUnknown для комплекта в наличии? Тогда и до диспозабла добраться не проблема...
Нее, лучше уж отправить тебя сравнивать 10(левое и 10(правое) - там ты хоть понимаешь с чем рабоатешь...
Или до тебя только сейчас начинает доходить, что в этой ситуации вообще можно продолжать работать?
Так завод и работает. В чем проблема?
Ну а в ZigBee на возможность доставить команду на устройство сокет, конечно, влияет, но вот не гарантирует что доставленное будет принято.
Насколько я помню, сокет - это пара из IP адреса и порта, т.е. сокет - это понятие из IP-протокола. Таким образом, фраза "доставить что-то на сокет по протоколу ZigBee" не имеет смысла.
Ну да ладно - для тебя, сидящего на сокете и не интересующегося окружением, это слишком сложно...
Ага, зато если послушать тебя, съевшего собаку на ZigBee, то получается, что устройства ZigBee несут в себе опасность для всего мира. И хакеры должны выстраиваться в очередь за этим волшебным железом :) А что? Подключился к сети и трындец - все программы (кроме твоей конечно) сдохли. Кррррасота :)
У сокетного (не ДотНет, а ВинАпи) хендла есть IDisposable?
У .Net'ого есть. Если по какой-то причине .Net'й сокет использовать нельзя, а можно только ВинАпи, то всегда можно обернуть сокет ВинАпи враппером и реализовать IDisposable.
Враппер, кстати, сделает использование ВинАпишного сокета тестируемым :) Так что одни сплошные плюсы.
Насколько я помню, сокет - это пара из IP адреса и порта
-----
Плоховато у тебя с сокетами.
Точнее - у тебя с сокетами ровно так как ты их видишь из программы. И не более.
Если тебе задать вопрос - как на одной паре ИП+порт будут работать несколько подключений - ответа у тебя не будет.
Может все же надо внимательно изучать окружение?
фраза "доставить что-то на сокет по протоколу ZigBee" не имеет смысла.
------
Ну, во-первых, фразу ты синтезировл самостоятельно.
А во-вторых - фраза таки имеет смысл, если смотреть на систему в целом, а не только на сокет.
ZigBee несут в себе опасность для всего мира
------
И не просто опасность, а сертифицированную опасность. Очень страшно....
можно обернуть
------
Да-да... особенно - в чужем коде и особенно для нелюбителей изучать окиружение...
Если тебе задать вопрос - как на одной паре ИП+порт будут работать несколько подключений - ответа у тебя не будет.
От сюда следует, что ответ будет у тебя :D Ну давай, рассказывай.
Может все же надо внимательно изучать окружение?
Нафига мне твое окружение? :)
Ну, во-первых, фразу ты синтезировл самостоятельно.
Твоя фраза:
Ну а в ZigBee на возможность доставить команду на устройство сокет
Сокет - это термин из мира IP, ZigBee - с IP никак не пересекается. Соответственно переслать что-то по протоколу ZigBee на сокет нельзя. При этом наверняка есть устройства, которые работают "мостами"/"шлюзами" между ZigBee и IP, но это уже другая тема. И если у тебя эти устройства глючат, то это проблема этих устройств, но никак не клиентского софта.
А во-вторых - фраза таки имеет смысл, если смотреть на систему в целом, а не только на сокет.
На колу мочало, начинай сначала.
Да-да... особенно - в чужем коде и особенно для нелюбителей изучать окиружение...
:) Красота! Каждый раз что-то новенькое :) То нельзя использовать .Нет, теперь вот код еще чужой :)
Ладно, открою тебе великую тайну - сокеты в ВинАпи - это тоже "чужой код" и, как нетрудно догадаться, любой "чужой код" можно обернуть враппером.
Ну давай, рассказывай.
----
Ох, ты-жжж...
Никак просишь рассказать тебе об том, что для тебя явлается окружением которое изучать не нужно и вредно...
Неее, не буду тебе вредить... просто скажу что внутренний идентификатор сокета гораздо длиннее ИП+порт.
И если у тебя эти устройства глючат, то это проблема этих устройств, но никак не клиентского софта.
------
Ну вот и будешь это рассказывать заказчику на предмет - Какого Хрена Оно Не Работает?
любой "чужой код" можно обернуть враппером
-----
Делай. Чужой код - класс А. Если не нравится - могу его статиком сделать.
internal class A
{
public delegate Boolean CheckRecursionCondition();
public event CheckRecursionCondition Condition;
public void Recursion()
{
AllocateResouce();
if (Condition())
{
Recursion();
}
DeallocateResouce();
}
private void AllocateResouce() { }
private void DeallocateResouce() { }
}
internal class B
{
A a;
public B()
{
a = new A();
a.Condition += ConditionChecker;
}
static int count = 0;
private static Boolean ConditionChecker()
{
if (count > 20)
throw new Exception("Dummy");
++count;return true;
}
public static void Runner()
{
B b = new B();
b.a.Recursion();
}
}
это уже другая тема.
-----
А заказчику как-то до лампочки какая этё тема - не работает - это он видит...
И когда в следующий раз упомянешь другую тему, то, плс, упомяни и другое сертифицированное оборудование... а то как-то смурно - тема - другая, а железяки - те же...
Никак просишь рассказать тебе об том, что для тебя явлается окружением которое изучать не нужно и вредно...
На кой фиг мне сдалось твое окружение? :)
просто скажу что внутренний идентификатор сокета гораздо длиннее ИП+порт.
Какой нахрен "внутренний идентификатор" сокета? Ты вообще о чем?
Ну вот и будешь это рассказывать заказчику на предмет - Какого Хрена Оно Не Работает?
Нет, не буду. Я просто скажу ему, что проблема не в моем софте. А уже после этого можно будет начать разговоры о возможных путях решения проблемы.
Чужой код - класс А.
Это интернал-то? :)
public interface IA { public event CheckRecursionCondition Condition; public void Recursion(); } public class Wrapper_A : IA { private A a = null; public Wrapper_A () { a = new A (); a.Condition += ConditionChecker; } private Boolean ConditionChecker() { try { if (Condition != null) return Condition (); return false; } catch { return false; } } public event CheckRecursionCondition Condition; public void Recursion() { A.Recursion (); } }
Ну и использование:
internal class B { public IA a {get; private set; } public B(IA a) { this.a = a; a.Condition += ConditionChecker; } static int count = 0; private static Boolean ConditionChecker() { if (count > 20) throw new Exception("Dummy"); ++count; return true; } } public static void Runner() { B b = new B(new Wrapper_A()); b.a.Recursion(); }
Как-то так.
А заказчику как-то до лампочки какая этё тема - не работает - это он видит...
С таким же успехом от заказчик может требовать работы твоего софта от производителя железок. Я не могу отвечать за работу других компонентов. И при выполнении своей работы я исхожу из того, что другие компоненты работают без ошибок.
А уже после этого можно будет начать разговоры о...
-----
...где найти другого дурака готового расстаться с деньгами на разработку.
Как-то так.
-----
Ну да - осталось выполнить то, об чем был разговор изначально - выход из рекурсии посредством эхцептиона...
Я не могу отвечать за работу других компонентов.
-----
Тебе не за это надо отвечать, а за работоспособность системы в целом, со всеми железками и деревяшками.
И для того чтобы заставить ее работать - придется изучить и изучить в деталях что и как надо делать не только на сокете, но и в каждом девайсе.
Не можешь, не умеешь, не хочешь - свободен...
будешь ли ты использовать ехцептион для выхода из вложенных циклов или рекурсии...
Выход из цикла или из рекурсии по исключению - это вполне себе нормальный способ. Однако, это не значит, что из всех циклов и рекурсий надо выходить по исключению.
Исключение - это способ сообщить об ошибке или о какой-то специальном состоянии и если эта ошибка или специальное состояние должны заканчивать цикл или рекурсию, то логично и правильно выходить из цикла или рекурсии по исключению.
-----
Ну а с этим кто-то спорит?
Повторюсь - был задана вопрос - А? - на что было отвечено - Да.
По факту было сделано - Нет.
Об нормальности и ненормальнности методики сейчас не говорим.
Мне ведь ничего не стоит запихать выброс исключения во внутрь рекурсивного метода.
Ну а с этим кто-то спорит?
Ну Я надеюсь, что ты не пользуешься исключениями как способом управления работой прожки
Ну т.е. вызодить из цикла и/или рекурсии по исключению - это нормально и никаких проблем с этим нет. Или как?
Повторюсь - был задана вопрос - А? - на что было отвечено - Да.
По факту было сделано - Нет.
Что за фигня? Ты прогнал какую-то дичь, что мол нельзя выходить исключениями из циклов и рекурсий, т.к. не будут освобождены ресурсы. Привел какой-то говно код, который не освобождает ресурсы в случае исключения.
Я обернул твой говно код в оболочку и решил все проблемы, показав тем самым, что даже имея такой говно код можно обойти все проблемы и мало того, что освободить ресурсы в случае исключения, так еще и сделать код тестируемым.
На вопрос "можно ли управлять работой программы исключениями" ответ да.
Мне ведь ничего не стоит запихать выброс исключения во внутрь рекурсивного метода.
Конечно! Писать говно код вообще не очень трудно :)
Получить исключение в нормально работающей программе - это нормально?
А что такое "нормально работающая прога"? Или по-твоему исключение - это только NullPointerException, деление на 0, переполнение стека, AccessViolation и прочее?
Сгенерировать исключение в случае, если нет доступа к БД или к файлу - это вполне себе "нормально работающая программа".
В старые времена ошибка возвращалась в виде целочисленного значения - 0 - нет ошибки, все остальное - код ошибки. Сейчас вместо возврата значения ошибки кидают исключение и да это "нормально работающая программа".