package com.github.kpavlov.jreactive8583.example.client;
import com.github.kpavlov.jreactive8583.client.ClientConfiguration;
import com.github.kpavlov.jreactive8583.client.Iso8583Client;
import com.solab.iso8583.IsoMessage;
import com.solab.iso8583.MessageFactory;
import com.solab.iso8583.impl.SimpleTraceGenerator;
import com.solab.iso8583.parse.ConfigParser;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
@Configuration
public class Iso8583ClientConfig {
@Value("${iso8583.connection.host}")
private String host;
@Value("${iso8583.connection.port}")
private int port;
@Value("${iso8583.connection.idleTimeout}")
private int idleTimeout;
@Bean
public Iso8583Client<IsoMessage> iso8583Client() throws IOException {
SocketAddress socketAddress = new InetSocketAddress(host, port);
final ClientConfiguration configuration = ClientConfiguration.newBuilder()
.withIdleTimeout(idleTimeout)
.withLogSensitiveData(false)
.build();
return new Iso8583Client<>(socketAddress, configuration, clientMessageFactory());
}
private MessageFactory<IsoMessage> clientMessageFactory() throws IOException {
final MessageFactory<IsoMessage> messageFactory = ConfigParser.createDefault();
messageFactory.setCharacterEncoding(StandardCharsets.US_ASCII.name());
messageFactory.setUseBinaryMessages(false);
messageFactory.setAssignDate(true);
messageFactory.setTraceNumberGenerator(new SimpleTraceGenerator((int) (System
.currentTimeMillis() % 1000000)));
return messageFactory;
}
}