22
33import ch .loway .oss .ari4java .ARI ;
44import ch .loway .oss .ari4java .AriVersion ;
5- import ch .loway .oss .ari4java .generated .models .*;
6- import ch .loway .oss .ari4java .tools .AriCallback ;
5+ import ch .loway .oss .ari4java .generated .models .AsteriskInfo ;
6+ import ch .loway .oss .ari4java .generated .models .Message ;
7+ import ch .loway .oss .ari4java .generated .models .PlaybackFinished ;
8+ import ch .loway .oss .ari4java .generated .models .StasisStart ;
9+ import ch .loway .oss .ari4java .tools .AriConnectionEvent ;
10+ import ch .loway .oss .ari4java .tools .AriWSCallback ;
711import ch .loway .oss .ari4java .tools .RestException ;
12+ import org .slf4j .Logger ;
13+ import org .slf4j .LoggerFactory ;
814
9- import java .time .LocalDateTime ;
1015import java .util .concurrent .ExecutorService ;
1116import java .util .concurrent .Executors ;
1217import java .util .concurrent .TimeUnit ;
1318
1419public class Weasels {
1520
16- // private static final String ARI_URL = "http://192.168.99.100:18088/";
17- // private static final String ARI_USER = "ari4java";
18- // private static final String ARI_PASS = "yothere";
19- private static final String ARI_URL = "http://asterisk1.local:8088/" ;
20- // private static final String ARI_URL = "http://localhost:8088/";
21- private static final String ARI_USER = "asterisk" ;
22- private static final String ARI_PASS = "asterisk" ;
2321 private static final String ARI_APP = "weasels-app" ;
2422
2523 private ARI ari ;
24+ private Logger logger = LoggerFactory .getLogger (Weasels .class );
2625
2726 public static void main (String [] args ) {
28- new Weasels ().start ();
27+ if (args .length != 3 ) {
28+ System .out .println ("Expecting 3 arguments: url user pass" );
29+ System .exit (1 );
30+ }
31+ new Weasels ().start (args [0 ], args [1 ], args [2 ]);
2932 }
3033
31- private void start () {
32- log ("THE START" );
33- boolean connected = connect ();
34+ private void start (String url , String user , String pass ) {
35+ logger . info ("THE START" );
36+ boolean connected = connect (url , user , pass );
3437 if (connected ) {
3538 try {
3639 weasels ();
3740 } catch (Throwable t ) {
38- log ("Error: " + t .getMessage ());
39- t .printStackTrace ();
41+ logger .error ("Error: {}" , t .getMessage (), t );
4042 } finally {
41- log ("ARI cleanup" );
43+ logger . info ("ARI cleanup" );
4244 ari .cleanup ();
4345 }
4446 }
45- log ("THE END" );
46- }
47-
48- private void log (String message ) {
49- String time = LocalDateTime .now ().toString ();
50- String thread = Thread .currentThread ().getName ();
51- System .out .println (time + " - [" + thread + "] - " + message );
47+ logger .info ("THE END" );
5248 }
5349
54- private boolean connect () {
50+ private boolean connect (String url , String user , String pass ) {
5551 try {
56- // ari = ARI.build(ARI_URL, ARI_APP, ARI_USER, ARI_PASS, AriVersion.IM_FEELING_LUCKY);
57- ari = ARI .build (ARI_URL , ARI_APP , ARI_USER , ARI_PASS , AriVersion .ARI_5_0_0 );
58- log ("Detect Server ARI Version: " + ari .getVersion ().version ());
59- // AsteriskInfo info = ari.asterisk().getInfo().execute();
60- // log("System up since " + info.getStatus().getStartup_time());
52+ ari = ARI .build (url , ARI_APP , user , pass , AriVersion .IM_FEELING_LUCKY );
53+ logger .info ("ARI Version: {}" , ari .getVersion ().version ());
54+ AsteriskInfo info = ari .asterisk ().getInfo ().execute ();
55+ logger .info ("AsteriskInfo up since {}" , info .getStatus ().getStartup_time ());
6156 return true ;
6257 } catch (Throwable t ) {
63- log ("Error: " + t .getMessage ());
64- t .printStackTrace ();
58+ logger .error ("Error: {}" , t .getMessage (), t );
6559 }
6660 return false ;
6761 }
6862
6963 private void weasels () throws InterruptedException , RestException {
7064 final ExecutorService threadPool = Executors .newFixedThreadPool (10 );
71- ari .events ().eventWebsocket (ARI_APP ).execute (new AriCallback <Message >() {
65+ ari .events ().eventWebsocket (ARI_APP ).execute (new AriWSCallback <Message >() {
7266 @ Override
7367 public void onSuccess (Message message ) {
7468 threadPool .execute (() -> {
@@ -78,40 +72,45 @@ public void onSuccess(Message message) {
7872 } else if (message instanceof PlaybackFinished ) {
7973 handlePlaybackFinished ((PlaybackFinished ) message );
8074 } else {
81- log ("Unhandled Event - " + message .getType ());
75+ logger . info ("Unhandled Event - {}" , message .getType ());
8276 }
8377 } catch (Throwable e ) {
84- log ("Error: " + e .getMessage ());
85- e .printStackTrace ();
78+ logger .error ("Error: {}" , e .getMessage (), e );
8679 }
8780 });
8881 }
82+
8983 @ Override
9084 public void onFailure (RestException e ) {
91- log ("Error: " + e .getMessage ());
92- e .printStackTrace ();
85+ logger .error ("Error: {}" , e .getMessage (), e );
86+ threadPool .shutdown ();
87+ }
88+
89+ @ Override
90+ public void onConnectionEvent (AriConnectionEvent event ) {
91+ logger .debug (event .name ());
9392 }
9493 });
9594 // usually we would not terminate and run indefinitely
9695 // waiting for 5 minutes before shutting down...
97- threadPool .awaitTermination (2 , TimeUnit .MINUTES );
96+ threadPool .awaitTermination (5 , TimeUnit .MINUTES );
9897 }
9998
10099 private void handleStart (StasisStart start ) throws RestException {
101- log ("Stasis Start Channel: " + start .getChannel ().getId ());
100+ logger . info ("Stasis Start Channel: {}" , start .getChannel ().getId ());
102101 ARI .sleep (300 ); // a slight pause before we start the playback ...
103102 ari .channels ().play (start .getChannel ().getId (), "sound:weasels-eaten-phonesys" ).execute ();
104103 }
105104
106105 private void handlePlaybackFinished (PlaybackFinished playback ) throws RestException {
107- log ("PlaybackFinished - " + playback .getPlayback ().getTarget_uri ());
106+ logger . info ("PlaybackFinished - {}" , playback .getPlayback ().getTarget_uri ());
108107 if (playback .getPlayback ().getTarget_uri ().indexOf ("channel:" ) == 0 ) {
109108 String chanId = playback .getPlayback ().getTarget_uri ().split (":" )[1 ];
110- log ("Hangup Channel: " + chanId );
109+ logger . info ("Hangup Channel: {}" , chanId );
111110 ARI .sleep (300 ); // a slight pause before we hangup ...
112111 ari .channels ().hangup (chanId ).execute ();
113112 } else {
114- log ( "Error: Cannot handle URI - " + playback .getPlayback ().getTarget_uri ());
113+ logger . error ( " Cannot handle URI - {}" , playback .getPlayback ().getTarget_uri ());
115114 }
116115 }
117116
0 commit comments