#! /bin/bash
#NC imcp.ba@free.fr IMCP Blandy Alain
#VERSION CLIENT microconftrousperdu.sh DU 1698394699 # 27/10/2023 08:18:19 UTC
#
# CE PROGRAMME microconftrousperdu.sh
# EST DESTINE A CHATER EN MODE TEXTE ET ENSUITE
# A PRENDRE LA PAROLE EN AUDIO DANS LA CONFERENCE COURANTE
# EN DIRECT OU EN PLAY BACK
# IL Y A UN TIMEOUT INTERNE A INTERVENTION DANS LE SERVEUR
# IL EST EVENTUELLEMENT SOUS CONTROLE CHAT DE L OPERATEUR DISTANT
# PEUT ENVOYER UNE PHOTO ( trombinoscope ) DOCUMENT GRAPHIQUE (explicatif)
# QUI SERA DIFFUSE DANS HTML QUAND IL SEAR ACTIF AU MICRO
#
#
# CE PROGRAMME CLIENT ETABLIS UNE LIAISON AVEC UN DES SERVEURS servmicroconf.sh
# PROGRAMME CLIENT POUR CHATER EN MODE TEXTE SOUS LINUX
# ET ENSUITE TRANSMETTRE UN SON AUDIO
# si un seul serveur est lance)
# les differents clients sont servis a tour de role !!!....
# le retour texte du serveur est toujours valide
# si plusieurs serveurs alors un seul client en audio !!!
# les autres reste en mode chat texte uniquement ou photo
# La presence d'un operateur sur les serveur n'est pas indispensable !! ??
# auquel ca les utilisateurs se debrouillent entre eux pour parler a tour de role ....
# en surveillant les messages html du status de la conference
# =======================================
# suppose que l'on a charge
# - le module netcat : nc
# verifier avec la commande : nc -h
# si c'est pas le cas loader le module netcat
# pour debian et suite
# su
# apt-get update
# apt-get install netcat
# ...........
# verifier avec la commande : nc -h
# meme procedure pour sox ...........
# verifier sox -h
#
# tester ensuite
# le petit programme suivant
# " rec -t wav - | play -t wav - "
# qui envois le son du micro sur le HP ...
# avec un bon volume sonore sans saturer !!!
# ( dans ce script un barregraphe est disponible )....
#
# regler le mixeur son linux pour faire marcher tous ca
#
#
OSSL='openssl'; # usualy in /usr/bin see $PATH
# =======================================
# =======================================
# MISE EN OEUVRE PAR COPIER COLLER
#
# FAIRE UN CD Dans un directory approprie
# ex : mkdir conference
# cd conference
#
# OUVRIR OU CREER AVEC UN EDITEUR ./microconftrousperdu.sh
# et vider la page ( tout selectionner ; supprimer )
#
# AVEC VOTRE SEURFEUR DANS L ENCADRE DE COULEUR
# COPIER (CTL+C) tous ce fichier source
#
# REVENIR dans l'editeur
# FAIRE UN COLLER le (CTL+V) (ou boutton central sourie)
# ET SAUVEGARDER dans ./microconftrousperdu.sh
#
# EN LIGNE DE COMMANDE :
# RENDRE EXECUTABLE le fichier :
# chmod +x ./microconftrousperdu.sh (0755)
# LANCER le client ./microconfttrousperdu.sh
# dans des fenetres xterm ou console ALT+F1 .... separees !
# ....
# =======================================
# =======================================
# parametres
serveur='www.trousperdu.org'; #serveur a contacter par defaut
portmicro='5002'; #port a contacter par defaut ; ,serveur servmicroconf.sh
ident='?'; #identitee du demandeur par defaut : inconnue
# les parametres d'appel sont identifies par leur possition
# un parameter indefinis ( par defaut) est represente par le caractere '!'
if test "$1" != '' && test "$1" != '!' ; then #parametre 1 si different de !
serveur="$1"; # c'est le nom explicite du serveur
fi;
if test "$2" != ''&& test "$2" != '!' ; then #parametre 2 si different de !
portmicro="$2"; # c'est le port explicite du serveur
fi;
if test "$3" != ''&& test "$3" != '!' ; then #parametre 3 si different de !
ident="$3 $4 $5 $6 $7 $8 $9"; # identite explicite
else
ident="`hostname -s`"; #identitee du demandeur par defaut sur hostname
if test "$?" != '0'; then #meme hostname ne marche pas !!!
ident='no_name'; #identitee du demandeur par defaut inconnue ???
fi;
fi;
# cette identite est transmise automatiquement au serveur
defaultfilepres='user_pres.wav'; #### FILE client # nom fichier par defaut son de presentation du conferentie
# tres cours "ici non prenom avec un silence" ( moins de 10 s)
# diffuse au prealable a toutes prise du micro
defaultfilephoto='user_photo.jpg'; #### FILE client # nom fichier par defaut dans le directory de travail 250 * 175
# sert de trombinoscope ou de dovument illustratio
# identite est transmisse au serveur qui l'affiche
# le premier mot de identite,suivis du suffix jpg
# selectionne dans le serveur apache l image (200*150 /conference/IDENT.jpg)
# a transmettre du locuteur
# si les horloges sont syncro
# la photo n'est transmise qu'une seule fois 200
# ensuite on utlise le code appache 304 update
# ca n'a pratiquement pas d effet sur le debit !!!!
# pour instant on utilise une balise VIDEO sans image pour transmettre le son
# on verra plus tard pour une image a faible debit !!!
# ========================================
echo " $0 $*
PROGRAMME CLIENT POUR
CHATER EN MODE TEXTE
avec le seveur $serveur TCP port $portmicro
(sous identitee $ident )
ET ENSUITE seulement envoyer le SON local, une PHOTO ...
( usage : $0 $serveur $portmicro $ident
'!' : parametre par defaut )
Appel simplifie
$0 ! ! votre_prenom_non patati patata
Vos fichiers speciaux personnels :
$defaultfilepres
# fichier son de presentation du conferentie
# tres cours ' ici non prenom ' avec un silence d'une segonde
# a envoyer au serveur par la commande PRES (sans argument fichier)
# utilise par le serveur au debut de votre intervention SON
$defaultfilephoto
# format 250 * 175 de preference
# a envoyer par la commande PHOTO (sans argument fichier)
# utilise par le serveur en HTML pendant votre intervention SON
";
echo -n " tapper return "
read a;
echo;
# par convention les appel simple sous unix exec
# $0 represente le path appel du script
# et permet ici auto referencement du fichier script source
grep '#VERSION' $0 | grep -v grep;
echo;
# ---------------------------------------------------------
#pour limiter le debit sans perdre en qualitee !!!!!
modemicro=' -c 1 -r 11025 ' ; # decallage 1s (172 kb/s ) (21.5 Ko/s)
#modemicro=' -c 1 -r 6000 ';
# ne pas modifier ce parametre !!!!
# ( tel quel il permettrais th. d'avoir 5 ecouteurs par mega upload )
# il est imoprtant que tous les locuteur est le meme modemicro
# sinon la mise bout a bout des inteventions dans le REPLAY final
# de esemble de la conference
# prends trop de temps ou est impossible !!!!!!
# ---------------------------------------------------------
while test '1' == '1'; do # pour relancer la connection au serveur
tty -s; # attache a une tty
if test "$?" != '0' ; then
break; #pour tuer tache plus ou pas attache a xterm
fi; #sinon elle encombre et bloque etant ratachees a init pid 1
(
#cette commande est envoye de maniere transparente au serveur !!!!
echo " ident `date -u +%s` ' $ident ' - HELO $serveur ($portmicro) "; #envois vers le serveur
#permetra aussi au serveur de verifier aussi que cette horloge est ok
echo -e "
Demande de cession envoye .... ? ($ident)
Chat en mode texte suivis de envois audio
Tapper votre texte ci-apres ....
pour arreter CTL+C (pour liberer le serveur)..
Attention envois d'une ligne vide permet de passer
en mode en diffusion micro direct conference
SON
SON nomdefichier : diffuse le play back en conference
et garde la main ...
toutes autres 'ligne de commande' sera interprete
PHOTO (fichier jpg) envois d'une image au serveur
PRES (fichier wav) envois d'un jingeul de presentation
ou sera expediee tel quel en chat au serveur
qui peut vous repondre par chat texte " 1>&2; #en immediat sur stderr
while echo -n '> ' 1>&2; read ; do #lire les lignes recus sur stdin
# traitements segondaire de la ligne recuee
minus="`echo $REPLY | tr [A-Z] [a-z]`"; #transformer en minuscule
# en supprimant les blancs initiaux et finaux
vus=''; #aucune commande connue detecte
# partie transmission son : en live ou en playback
if test "${minus/son}" != "$minus" || test "$minus" = ''; then #SON ou alias ligne vide
#transmission d'un son
vus='SON'; # type de commande detecte
fileson="`echo $REPLY | (read a b c ;echo $b;)`"; #extraire deuxieme argument
if test "$fileson" == ''; then #si pas argument alors prise du micro en direct (/dev/dsp ?)
# micro
echo "$vus"; #commande distale de commutation audio ( retour texte toujours possibe) !!!
echo "Demarrage transmission micro ... ; CTL+C pour terminer enregistrement ! " 1>&2; #en immediat sur stderr
rec $modemicro -t wav - ; #avec barre graph visible;
echo " Fin Transmission son micro : ( pas ou plus disponnible ) !" 1>&2; #en immediat sur stderr
#echo "Quit";
break ;#ici on a fini on doit tuer nc
else # argument fichier son a transmettre
# (play back enregistre par recorder.sh)
if test -f $fileson ; then # tester acces au fichier
echo "$vus"; #commande distale de commutatio audio ( retour texte toujours possibe) !!!
echo "Demarrage transmission fichier $fileson ..." 1>&2; #en immediat sur stderr
sox -t wav $fileson $modemicro -t wav - ; #fileson est cense entre enrgistre au bon format avec recorder.sh
echo " Fin de la Transmission du fichier son $fileson !" 1>&2; #en immediat sur stderr
echo " Attendez un peut .... Tapper CTL+C " 1>&2; #en immediat sur stderr
#dure de attente correspendant a duree audio
#echo "Quit";
break ;#ici on a fini la transmission on doit tuer nc KOKKKKKKKKKKKKKKKKKKKKK ????
else
echo "Pas de fichier $fileson ! " 1>&2; #en immediat sur stderr
echo " ( PWD ` /bin/pwd ` ) " 1>&2; #en immediat sur stderr
echo " Recessir votre ligne de commande : $vus fichier.wav ? " 1>&2; #en immediat sur stderr
# deuxieme chance
fi;
fi;
#revenier en attente de lecture ligne commande deuxieme chance
fi;
# TBDF autres traitement ligne de commande !!!!!!!!!!!!!!!!!!!
#elseif commande envois image ...... !!!!!!!!!!!!!!!!!!!!!!!
#elseif commande envois son ......... !!!!!!!!!!!!!!!!!!!!!
filebinaire=''; #indicateur de presence commande fichier binaire a transmettre
if test "$vus" == '' && test "${minus/photo}" != "$minus" ; then # photo
#transmission d'une photo ou document graphique poiur la confrencve
vus='PHOTO';
filebinaire="`echo $REPLY | (read a b c ;echo $b;)`"; #deuxieme argument
if test "$filebinaire" == ''; then #si pas argument
filebinaire="$defaultfilephoto"; #par defaut
# dans le directory de travail 250 * 175
fi;
fi;
if test "$vus" == '' && test "${minus/pres}" != "$minus" ; then # presentaion sonore
#transmission d'une presentation sonore
vus='PRES';
filebinaire="`echo $REPLY | (read a b c ;echo $b;)`"; #deuxieme argument
if test "$filebinaire" == ''; then #si pas argument
filebinaire="$defaultfilepres"; #par defaut
# dans le directory de travail wav de moins de 10s
fi;
fi;
if test "$filebinaire" != ''; then # si binaire a transmettre
echo " Commande $vus : fichier $filebinaire a transmettre au nom de $ident. ...." 1>&2;
if ! test -f $filebinaire; then # test presence fichier
echo " Commande $vus : fichier $filebinaire impossible a ouvrir ????
( PWD ` /bin/pwd ` )
syntaxe : $vus [fichier_binaire_a_transmettre]" 1>&2;
filebinaire=''; # annulation transmission
#on recommance !!!!! deuxieme chance
else
echo "$vus"; #envois de la commande au serveur
sleep 1; #attente serveur
#traitement commun
echo " Commande $vus : fichier $filebinaire envois par $OSSL ...." 1>&2;
$OSSL enc -base64 <$filebinaire; #envois vers serveur
if test "$?" != '0'; then
echo " Commande $vus : fichier $filebinaire ERREUR $? $OSSL ???" 1>&2;
else
echo " Commande $vus : fichier $filebinaire envoye par $OSSL." 1>&2;
echo " Verifier le resulta avec la page html Status. " 1>&2;
fi;
echo 'STOPSTOPSTOP'; #fin de base 64
# il n'y a pas de break : on reviends en lecture de liugne de commande sans couper nc
fi;
fi;
filebinaire='';
if test "$vus" == ''; then #else #ligne commande non identifie !!!
echo "$REPLY"; #simple echo distant vers le serveur
# (commande quit non intereperete localement )
echo " ( Des que vous etes pret a emettre en audio
et que le locuteur precedent a fini
ou ci vous recevez instruction GO
Tapper
une ligne vide pour expedier le son de votre micro
ou tapper la commande
SON nomdefichieratransmettre.wav (pour un playback)
La commande
PHOTO [nomlfichier.jpg]
met a jours votre photo identite ...
La commande
PRES [nomdefichier.wav]
met a jour votre identitee sonore ..." 1>&2;
fi;
done;
# mypid="`bash -c 'echo $PPID'`";
# echo "Bash pid $mypid ------------" 1>&2;
# tuer NC par fin de pipe !!!
) |
nc $serveur $portmicro | # -v mode bavard
(
while read ; do # ligne recue du serveur en entiere (avec les blanc ...) mise en couleur
echo; #pour finir barre graphe
echo -n -e '\033[01;33m'; # mode colore jaune pour les reponses ESC devant le 033 metre un back slach \\
echo -n -E "$REPLY"; # ligne recue entiere (avec les blanc ...)
echo -e '\033[00m'; # mode normal ESC devant le 033 metre un back slach \\
done;
);
echo "
Pas ou plus de Connection disponnible ! ";
echo -n "
Voulez vous relancer la connection (ligne vide oui) : ";
read a; echo;
if test "$a" != ''; then break; fi;
echo -n " Nouvel essai ...";
sleep 3;echo ' !'; #histoire de donneer la parole a d'autre ....
done;
echo "
$0 $*
PROGRAMME TERMINE
";
# copier coller jusque ici inclus !!!
#
#
|