/* $Id$ * * Copyright 2007-2008 Cisco Systems Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ module org.apache.etch.examples.chat /** * The Chat example program implements a simple service * for communicating between logged in users. */ @Authorize( isLoggedIn ) @Timeout( 4000 ) service Chat { /** * Exception thrown if Chat fails. * * @param msg the reason for the failure. */ exception Failure( string msg ) ////////// // AUTH // ////////// /** * Marks the user as logged in if they are authentic and have the right * to utilize the service. * * @param name the name of the user. * * @param pwd the password of the user. * * @throws Failure if the user is already logged in, name or pwd don't * match authentication database, or if the user doesn't have the right * to utilize the service. */ @Authorize( true ) void login( string name, string pwd ) throws Failure /** * Marks the user as logged out. */ @Authorize( true ) void logout() /** * Checks if a user is logged in. * * @return true if a user is logged in. */ @Authorize( true ) @Direction( Both ) boolean isLoggedIn() ////////// // CHAT // ////////// /** * Reports the set of online users upon login. * * @param names the set of online users. */ @Oneway @Direction( Client ) void whoIsOnline( string[] names ) /** * Reports a status change of a user. * * @param name the name of the user. * * @param online true if they are now online. */ @Oneway @Direction( Client ) void statusChange( string name, boolean online ) /** * Sends a message to or from the named user. * * @param who the name of the recipient or the sender * depending upon the direction. * * @param msg the message to send. * * @throws Failure if the user is not online. */ @Direction( Both ) @AsyncReceiver( Queued ) void send( string who, string msg ) throws Failure }