Skip to content

KhadanovichSergey/iskanderusController

Repository files navigation

* конфигурационный файл
Конфигурационный файл может быть 2 видов: 
	- файл с пропертисами config.properties например
		пример конфигурационного файла в этой же директории template_config.properties
   
	-конфигурационный файл config.xml
		пример конфигурационного файла в этой же директории template_config.xml
   
* команды

Команды могут быть нескольки видов :

1) комнады, которые переправляются на соответствующую ей ардуину.
	эти команды должны быть определенного формата
	command_name.parameter1.parameter2 ... .parameterN, где
		command_name - идентификатор, состоящий из больших и маленьких латинских символов и цифр
		parameter i - положительное число
	
	количество параментров может быть сколько угодно, в том числе 0
	
	пример комманд:
		throat.100, pause.1000, name
	
2) команды, которые выполняются непосредственного на расбере пи
	должны быть такого же формата как и команды для ардуин
   
	в сервере по умолчания есть две таких команды:
		pause.countMillisecond - наличие параметра обезательно
		listScript
		пример использования
			run command listScript
		пример ответа
			command listScript run successfully with answer [list_names_of_script], где
				list_names_of_script - список имен скриптов через пробел
				command listScript run successfully with answer [pause arm throat], ответ сервера, если он содержит только три скрипта
   
   для того, чтобы добавить свою собственную специфичную команды необходимо
   выполнить последовательность шагом:
   
   - описать класс, реализующий интерфейс Function<String, String> и переопределить два метода
		
		* public String apply(String t);
			t - текстовое представление команды, которые было передано по сети
			return - текстовое сообщение, которое будет отправляться клиенту как результат выполнения команды
		
		* String toString(); (необезательно, но желательно)
			return - краткое описание команды
			
	- добавить в конфигурационный файл необходимые настройки
	    
	    * для *.properties
	    	
	    	specifiedCommand.command_name.text = текстовое представление команды или шаблон по стандарту POSIX
	    	specifiedCommand.command_name.class = полное имя класса, экземпляр которого будет обрабатывать сообщения
	    		подходящие под шаблон, записанный в text
	    	specifiedCommand.command_name.isPattern = является ли строка, записанная в поле text регулярным выражением
	    	
	    * для *.xml
	    	
	    	в блок <specifiedCommand></specifiedCommand> нужно добавить тэг command
	    	
	    	<command>
	    		<name>имя команды (в программе не используется, но желательно написать... сделанно для того чтобы
	    			было проше искать нужный тег в файле</name>
	    		<textPresentation>текст(шаблон или просто текст)</textPresentation>
	    		<class>полное имя класса</class>
	    		<isPattern>шаблон ли написанн в textPresentation</isPattern>
	    	</command
	    	
	- перезапустить сервер

3) команды, которые слушает сервер по tcp

	сервер по умолчанию поддерживает 5 таких команды
		
		* run command text
		text - текстовое представление команды. команда может быть как вида 1 так и 2
		
		пример
			run command throat.57 (команда, перенаправляемая на одну из ардуин)
			run command pause.1000 (команда для расбере пи)
			
		в качестве результата сервер возвращает ответ в виде строки, заканчивающейся \n
		
		 - если команда выполнена успешно, то
		 	command text run successfully with answer [answer], где text - текстовое представление команды,
		 	которую вы хотели выполнить, [answer] - результат выполнения команды
		 - если команда заданна не верно (не удовлетворяет шаблону), то
		 	wrong format command [text], где text - текстовое представление команды
		 - если команда заданна верно, но ее нет в списках команд, то
		 	command not found [text], где text - текстовое представление команды
		
		* save script script_name command1 command2 command3 ... commandN
		script - именнованная последовательность команд
		данная комана, сохраняет script под имененем script_name в файл script_name.script в каталог, который указан в конфигурационном файле
		command i - любая команда вида 1 или 2
		
		script_name - идентификатор, который может состоять из больших и маленьких латинских символов и цифр
		
		если вы сохраняите скрипт под именем которые уже есть, скрипт перезаписывается
		
		пример
			save script throat_tuda_siuda throat.0 pause.1000 throat.100 pause.1000 throat.0
		если хотя одна команда не распознана на данный момент, то скрипт не добавляется...
		
		пример ответа на правильно добавленный скрипт
			
			create script with name [throat_tuda_siuda]
			add command [throat.0] successfully
			add command [pause.1000] successfully
			add command [throat.100] successfully
			add command [pause.1000] successfully
			add command [throat.0] successfully
			script add to ScriptCollection
			
		пример ответа на добавление скрипта с неправильной командой
		
			save script one one&:-100 pause.1000 pupsia
			
			create script with name [one]
			wrong format command [one&:-100]
			add command [pause.1000] successfully
			add command [pupsia] successfully
			script not add to ScriptCollection
		
			
		* run script script_name
		script_name - имя скрипта
		Данная команда запускает скрипт по имени, который вы заранее сохранили с помощью предыдущей команды
		
		пример
			run script throat_tuda_siuda
			
		пример результата выполнения команды
		
			start script with name [throat_tuda_siuda]
			command throat.0 run successfully with answer [answer0]
			command pause.1000 run successfully with answer [answer1]
			command throat.100 run successfully with answer [answer2]
			command pause.1000 run successfully with answer [answer3]
			command throat.0 run successfully with answer [answer4]
			stop script with name [throat_tuda_siuda]
			
		если скрипта с именем script_name не удалось найти в коллекции скриптов, то
		ответ будет такой:
			
			script with name [throat_tuda_siuda] not found
		
		* delete script script_name
		script_name - имя скрипта
		удаляет скрипт по имени
		
		пример запроса
		
			delete script throat_tuda_siuda
		
		пример ответа
		
			если скрипт с таким именем есть на сервере, то
				script with name [throat_tuda_siuda] deleted
			если скрипт с таким именем не найден, то
				script with name [throat_tuda_siuda] not found
			
		* read script script_name
		script_name - имя скрипта
		
		пример запроса
			
			read script throat_tuda_siuda
		
		пример ответа
		
			если скрипт с таким именем найден, то
				script with name throat_tuda_siuda consists [listCommand], где
				listCommand - список команд, разделенных пробелами
			если скрипт с таким именем не найден то,
				script with name [throat_tuda_siuda] not found
					
	для создания своей собственной команды такого типа необходимо
	
		- создать класс и пронаследовать его от класса TCPHandler и переопределить у него метод String apply(String text)
		
			в процессе написание необходимо пользоваться методами
			
			runCommand(Command c) - выполняет команду вида 1, 2. после выполнения этого метода ответ будет находится в поле answer
			
			для накопления ответа можно использовать метод append(String text)
			
			для возвращения результата испльзовать метод toString();
		
		- добавить в конфигурационной файл необходимые изменения
		    
		    * для *.properties
		    	
		    	tcpHandler.command_name.text = текстовое представление команды или шаблон по стандарту POSIX
		    	tcpHandler.command_name.class = полное имя класса, экземпляр которого будет обрабатывать сообщения
		    		подходящие под шаблон, записанный в text
		    	tcpHandler.command_name.isPattern = является ли строка, записанная в поле text регулярным выражением
		    	
		    * для *.xml
		    	
		    	в блок <tcpHandlers></tcpHandlers> нужно добавить тэг command
		    	
		    	<command>
		    		<name>имя команды (в программе не используется, но желательно написать... сделанно для того чтобы
		    			было проше искать нужный тег в файле</name>
		    		<textPresentation>текст(шаблон или просто текст)</textPresentation>
		    		<class>полное имя класса</class>
		    		<isPattern>шаблон ли написанн в textPresentation</isPattern>
		    	</command
	    	
		- перезапустить сервер

* использование сервера
	для запуска сервера необходимо в параметра к jar указать два параметра
	
	config=пусть к конфигурационному файлу
	log=rewrite | append
	 rewrite - перезаписать лог
	 append - дописывать лог
	 
	сервер можно использовать двумя способами
	
	1) если вас устраивает стандартный набор команд то,
		необхоимо просто запустить сервер из консоли указав необходимые параметры
	2) если вы хотите дописать свой собственный функционал
		- необходимо подключить к проект Server.jar (jar файл этого проекта)
		- в методе main(String args) вашего проекта необходмо вызвать метод Server.main(args)
		
			try {
				Server.main(args);
			} catch (Exception e) {/* ошибка старта сервера */}
		

About

my diplom project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages