001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2025-2026 The Enola <https://enola.dev> Authors 005 * 006 * Licensed under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package dev.enola.audio.voice.twilio.relay.websocket; 019 020import dev.enola.audio.voice.twilio.relay.EchoConversationHandler; 021import dev.enola.common.ShutdownCloser; 022import dev.enola.common.logging.JavaUtilLogging; 023import dev.enola.common.secret.auto.AutoSecretManager; 024 025import java.io.IOException; 026import java.net.InetSocketAddress; 027import java.util.logging.Level; 028 029public class Main { 030 public static void main(String[] args) throws IOException { 031 String host = args.length > 0 ? args[0] : "localhost"; 032 int port = args.length > 1 ? Integer.parseInt(args[1]) : 8888; 033 var address = new InetSocketAddress(host, port); 034 035 JavaUtilLogging.configure(Level.ALL); 036 037 // TODO Add a (localhost only) /quitquit sort of command to close() the server 038 039 // TODO Move Main class to another module, and replace echo with AI conversation handler... 040 var handler = new EchoConversationHandler(); 041 042 ShutdownCloser.add( 043 new ConversationRelayServer(address, handler, AutoSecretManager.INSTANCE())); 044 } 045}