Внутренние правила общения

Каждое сетевое соединение к службе обслуживается Network-ом, нужные пакеты передаются службе по пайпам. Каждая пара (PipePair) пайпов представляет одно соединение для службы.
Структура пакетов
ниже представлена структура пакета
                            int packet_type;//тип пакета
                            int packet_size;//размер данных пакета
                            byte[] data;//данные пакета
                
Общие типы пакетов

Эти пакеты посылаются от Network-а к службе:

0: новое соединение к этой службе (первый пакет, посылаемый к службе), в пакете уточняется источник пакета
содержимое пакета таково:

                int size_str;//размер последующей строки
                byte[] host_ip;//IP присоединяющегося узла в текстовом виде (например "192.168.0.1")
                int size_id;//размер последующей строки
                byte[] id;//ID присоединяющегося узла
                

1: это соединение закрыто, после этого пара пайпов закрывается подсистемой. Также пакет с таким типом может послать сама подсистема через пайп. в таком случае пара пайпов закрывается Network-ом.

2: это соединение прервано, после этого пара пайпов закрывается, в пакете уточняется причина прерывания
содержимое пакета таково: int error_code

3: пакет с таким типом послыается от службы к Network-у, в нём сообщается об изменении атрибутов данного соединения.
содержимое пакета таково:
int is_limited;// указывает, ограничено ли соединение по трафику(1- ограничен, 0 - не ограничен)

4: пакет с таким типом посылается от network-а к подсистеме, когда подсистема запрашивает пару пайпов после завершения соединения к хосту. Если соединение прошло успешно, то в данных пакета указывается int status=0. если соединение неуспешно, то int status=-1.

Типы пакетов, обрабатываемые Download-ом.

1000:
1001:
...
1999:

Типы пакетов, обрабатываемые Search-ом.

2000:запрос на добавление информации о ресурсе на трекер:

		  // пакет содержит сериализованные данные
		  IDType id; // идентификатор ресурса
		  Vector hostList; // (NodeInfo) список хостов
		
2001:запрос информации о ресурсе с трекера:
		  // пакет содержит сериализованные данные
		  int maxResponse; // максимальное количество хостов в ответе
		  IDType id; // идентификатор ресурса
		
2002:запрос на добавление статической информации о ресурсе на трекер:
		  IDType id; // идентификатор ресурса
		  StaticInfo si; // статическая информация
		
2003:запрос на получение статической информации о ресурсе:
		  IDType id; // идентификатор ресурса
		
2004:запрос на добавление информации о потенциальном хранителе ресурса:
		  int storageSize; // максимальное возможное количество хранимых байт на хранителе
		
		2005:запрос на получение списка потенциальных хранителей:
		  int storageSize; // минимальное количество байт которые они должны быть готовы хранить
		  int maxResponse; // максимальное количество хранителей в ответе
		
2100:ответ: информация о ресурсе добавлена успешно:
2101:ответ: ресурс найден:
		  // пакет содержит сериализованные данные
		  Vector hostList; // (NodeInfo) список хостов
		
2102:ответ: ресурс не найден:
2103:ответ: статическая информация добавлена успешно:
2104:ответ: статическая информация найдена:
		  // пакет содержит сериализованные данные
		  StaticInfo si; // статическая информация
		
2105:ответ: статическая информация не найдена:
2106:ответ: хранитель успешно добавлен в список:
2107:ответ: найдены хранители:
		  // пакет содержит сериализованные данные
		  Vector hostList; // (NodeInfo) список хостов
		
2108:ответ: хранители не найдены:
Типы пакетов, обрабатываемые Модулями статической, динамической информации и ссылок.

3000:
3001:
...
3999:

Типы пакетов, обрабатываемые Distributer-ом.

4000:начальный пакет. Смысл "Хочу закачать на тебя такую полоску".содержимое:

	    	int matrix_string_size;
		int[matrix_string_size] matrix_string;
		int stripSize;
		int pieceSize;
		int pieceQuantity;

4001: ответ на 4000. Содержимое int status;// 0 - всё ОК, иначе - нет.

4002:пакет с куском полоски.

	    	int pieceNumber;
		int pieceSize;
		byte[pieceSize] data;

4003:ответ на пакет 4002 int status;//0 - всё ок.

4999: