Начало работы - Historicteam/SctpClient GitHub Wiki
Эта небольшая статья должна помочь вам разобраться в том, как использовать SctpClient для взаимодействия с sc-memory.
Для использования библиотеки вам необходимо использовать java версии 1.8 и больше.
Рекомендуется использовать Maven для подключения библиотеки. Для добавления зависимости с его помощью, просто добавьте в pom.xml следующий текст:
<repositories>
<repository>
<id>SctpClient-mvn-repo</id>
<url>https://raw.github.com//Historicteam/SctpClient/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>by.ostis.mihas</groupId>
<artifactId>sctp-client</artifactId>
<version>2.1-beta</version>
</dependency>
</dependencies>
Также можете скачать jar-файл c ветки mvn-repo.
Задача SctpClient это предоставление интерфейса для взаимодействия с sc-memory. Самый простой способ для отправки sctp-запросов — это вызвать один из методов класса, реализующего интерфейс SctpSender. SctpClient предоставляет две реализации этого интерфейса: для отправки асинхронных и синхронных запросов. Для создания SctpSender-а рекомендуется использовать статические методы createSender или createAsyncSender класса SctpSenderCreator. В качестве параметров в обоих методах необходимо передать IP-адрес и номер порта SCTP-сервера.
import new_client.SctpSenderCreater;
import sender.SctpSender;
...
SctpSender sctpSender = SctpSenderCreater.createSender("192.168.20.128", 55770);
...
По окончании работы с экземпляром SctpSender необходимо закрыть подключение. Для этого следует вызвать метод close у самого экземпляра либо у SctpSenderCreater, во втором случае будут закрыты соединения во всех SctpSender-ах, созданных с помощью SctpSenderCreater. Также для этой цели можно воспользоваться конструкцией try-with-resources, поскольку SctpSender реализует интерфейс autocloseable.
Оба SctpSender-а реализуют паттерн Fluent interface для методов выполняющих запросы к SCTP-серверу. Они возвращают FluentSctpResponse, у которого несколько методов, выполнение которых зависит от результата исполнения sctp-команды. succes, unsuccess, unfound, unavailable, error, exceprtion — все они принимают единственным параметром функциональные интерфейсы Commanda или CommandaWithParametr. Т.е. для обработки результатов запроса вам необходимо реализовывать функциональный интерфейс.
...
sctpSender.create().success(scAddress -> {
// этот метод выполниться в случае успешного выполнения команды
}).unsuccess(() -> {
// в случае безуспешного выполнения команды
}).unfound(() -> {
// если указанный sc-элемент не найден
}).unavailable(() -> {
// недостаточно прав для выполнения команды
}).error((returnCode) -> {
// выполняется когда не произошло успешного выполнения команды
}).exception((exception) -> {
// этот метод выполниться, если при запросе возникнет исключительная ситуация
})
...
Есть еще методы для получения результата кроме как через метод success. Например, по средствам метода get.
...
ScAddress scAddr;
try {
scAddr = sctpSender.find(new ScString("OSTIS")).get();
} catch (SctpException e) {
e.printStackTrace();
}
...
Или же можно получить обертку Optinal.
...
Optional ScAddress optinal = sctpSender.create(ScNode.CLASS_CONST).getOptinal();
...
С возможностями обертки Optinal можете ознакомится по ссылке.
Использование алтернатив метода success при использовании асинхронного способа взаимодействия не рекомендуется. С полным списком доступных в SctpSender методов можно ознакомится [тут](Интерфейс SctpSender).
Данный пример создает в базе знаний константный узел и устанавливает ему основной идентификатор "SctpClient".
import exception.SctpException;
import model.scparametr.ScAddress;
import model.scparametr.ScString;
import model.scparametr.scelementtype.ScConnector;
import model.scparametr.scelementtype.ScNode;
import new_client.SctpSenderCreater;
import sender.SctpSender;
public class SctpClientExample {
public static void main(String ...args) {
try(SctpSender sctpSender = SctpSenderCreater.createSender("localhost", 55770)) {
ScAddress nrel_main_idtf = sctpSender.find(new ScString("nrel_main_idtf")).get();
ScAddress langAddr = sctpSender.find(new ScString("lang_en")).get();
sctpSender.create(ScNode.CONST).success(nodeAddr -> {
sctpSender.create().success(linkAddr -> {
sctpSender.link(linkAddr, new ScString("SctpClient"));
sctpSender.create(ScConnector.ARC_COMMON_CONST, nodeAddr, linkAddr).success(arcAddr -> {
sctpSender.create(ScConnector.ARC_ACCESS_POS_PERM_CONST, nrel_main_idtf, arcAddr);
});
sctpSender.create(ScConnector.ARC_ACCESS_POS_PERM_CONST, langAddr, linkAddr);
});
});
} catch (SctpException e) {
e.printStackTrace();
}
}
}