Date: 10/13/98

Name of group: Phonetics

Team members: Chin-Yu Hsu, Michael Shen

Task: Multiparty audio conferencing + whiteboard (#8)

 

Brief description [as per webpage]: The telephone network carries the voice between participants, and a shared whiteboard allows participants to share a graphic workspace. Existing whiteboard applications such as wb or Web-based whiteboards, may be reused. Weare to design and implement a conference control application to allow participants to join and leave conferences (some conferences may be private, and not allow random users to join), and to allow a speaker to cede control to one of a set of waiting speakers. The control scheme should also allow users who may not be accessible on the Internet to have an audio-only connection to a conference.

 

Pseudocode:

// Entry Point

main()

{

LogonUser(); // figure out who is using this program

ConfThreadList->Initialize;

CreateThread(RequestHandler);

Do While !User->Quit

If User->StartNewConf Then

NewCallHandler();

If User->ListAvailConf Then

// Call some conference list server and obtain conferences

// this user is allowed to join

Endif

End Do

}

// Add a caller to a conference(or start a new conference)

RequestHandler()

{

Do

If $Caller = Signal->NewTalkRequest() Then

$ConfNum = AskUser("Join which Conference?", $Caller);

if Exist ConfThreadList($ConfNum) AND

ConfThreadList($ConfNum)->Allow($Caller) Then

ConfThreadList($ConfNum)->AddNewClient( $Caller );

Else if $ConfNum = NULL Then

ConfThreadList($ConfNum)->Init(); // Init will ops the callee

ConfThreadList($ConfNum)->AddNewClient( $Caller );

Else

Signal->RejectCaller();

Endif

End if

End Do

}

// Start a new conference by calling someone else...

NewCallHandler()

{

$Caller = AskUser("Who do you want to call?");

$ConfNum = A conference ID not in ConfThreadList;

ConfThreadList($ConfNum)->InitAndCall( $Caller );

}

Let $X = 1 to (# of threads in ConfThreadList)

ConfThreadList($X)->Handler()

{

Do While !User->Quit

Switch User->Command()

GiveOp:

ASSERT( User->HasOps );

$UserToOp->HasOps = TRUE;

break;

DenyOp:

ASSERT( User->HasOps );

$UserToOp->HasOps = FALSE;

break;

GiveTalk:

ASSERT( User->HasOps );

$UserToTalk->CanTalk = TRUE;

break;

DenyTalk:

ASSERT( User->HasOps );

$UserToTalk->CanTalk = FALSE;

break;

GiveModWhiteBoard:

ASSERT( User->HasOps );

$UserToTalk->CanModWhiteBoard = TRUE;

break;

DenyModWhiteBoard:

ASSERT( User->HasOps );

$UserToTalk->CanModWhiteBoard = FALSE;

break;

Invite:

ASSERT( User->HasOps );

AddToAllowList( $UserToInvite );

break;

UnInvite:

ASSERT( User->HasOps );

DelFromAllowList( $UserToInvite );

break;

Ban:

ASSERT( User->HasOps );

AddToBanList( $UserToBan );

break;

UnBan:

ASSERT( User->HasOps );

DelFromBanList( $UserToBan );

break;

MakePrivate:

ASSERT( User->HasOps );

MakeConfPrivate($X);

break;

MakePublic:

ASSERT( User->HasOps );

MakeConfPublic($X);

break;

Talk:

ASSERT( User->CanTalk || User->HasOps );

SendVoicePacket( All Users in this Thread );

break;

ModifyWhiteBoard:

ASSERT( User->CanModWhiteBoard || User->HasOps );

SendWhiteBoardCommand( All Users in thread, White Board Modification );

break;

CallNewUser:

$Caller = AskUser("Who do you want to call?");

CallAndAddNewClient( $Caller );

break;

Exit:

GoodBye();

break;

End Switch

End Do

}

Interfaces to provide:

Our application does not provide any interfaces.

Interfaces used:

Directory Service – access of the user info in their database. We would need the following standard directory API functions to be implemented for our use:

Class DirectoryInfo {

// given a phone number, returns unique person ID

SearchPhoneNumber()

// given an IP, returns unique person ID

SearchIP()

// given unique person ID, returns location of person (IP and phone number)

LookupPerson()

}

Also, we require a data structure from the directory service that contains the ongoing conferences and the users who are currently in the conference:

Class ConferenceList{

// returns a listing of all ongoing conferences

ListAll();

// add unique user ID to list

AddToList();

// delete unique user ID from list

DeleteFromList();

}

Signal – initial handshake and confirmation between the telephone and the connection to teleconferencing. We would need the following API functions to be implemented for our use:

Class DesktopSignaling {

// returns unique person ID who wants to connect to the teleconferencing

RegisterUpcallForINcomingConnection();

// returns handle to the actual phone connection

Dial();

// ends telephone call

Hangup();

// allows the call

AcceptCall();

// disallow the call

RejectCall();

}

Data – transmission of packets over the Internet. We would need the following API functions to be implemented for our use:

Class Connection {

// given packet size, sends out packets of that set size

WriteData();

// given packet size, read packets of that set size

ReadData();

// given IP, creates the connection

Open();

// given handle to connection, close it

Close();

}

 

Schedule:

October:

1st week – compare and discuss project descriptions with all the other groups and make sure we agree on the specifications we requested. iron out and discrepancies.

2nd week – convert pseudo-code to working code

3rd week – convert pseudo-code to working code

4th week – convert pseudo-code to working code

November:

1st week – convert pseudo-code to working code

2nd week – convert pseudo-code to working code

3rd week – understand and test given interfaces (data, signal and directory) to make sure it works according to specification

4th week – debug our code with given interfaces

December:

1st week - continue to debug our code making sure it works according to specification in the overall presentation of project.

2nd week – finalize project: resolve any last minute unforeseen problems that may occur.

 

Materials needed:

Documentation/Help on implementation of real time full-duplex audio transmissions.

1. signaling provides info for billing

 

References:

  1. Java SDK 1.1 APIs - http://www.javaworld.com/javaworld/jw-11-1997/jw-11-step.html
  2. Java whiteboard sample source code - http://spectral.mscs.mu.edu/javadev/DDJ/