• Non ci sono risultati.

Chat multiutente con le FIFO Ogni messaggio è ha il seguente formato: struct messaggio{ char tipo; char mittente[30]; char ricevente[30]; char msg[256];

N/A
N/A
Protected

Academic year: 2021

Condividi "Chat multiutente con le FIFO Ogni messaggio è ha il seguente formato: struct messaggio{ char tipo; char mittente[30]; char ricevente[30]; char msg[256];"

Copied!
1
0
0

Testo completo

(1)

Chat multiutente con le FIFO

Ogni messaggio è ha il seguente formato:

struct messaggio{

char tipo;

char mittente[30];

char ricevente[30];

char msg[256];

};

Server

Il server crea una FIFO di nome “canale” sulla quale tutti i client possono scrivere dei messaggi.

Mantiene una lista degli utenti registrati e con un flag lo stato di ciascuno (connesso, non connesso), inizialmente tutti gli utenti sono impostati allo stato non connesso.

I messaggi di tipo {'I',”nick”,””,””} rappresentano la sincronizzazione iniziale da parte di un client attivato dall'utente “nick”.

I messaggi di tipo {'F',”nick”,””,””} rappresentano la sincronizzazione finale da parte di un client attivato dall'utente “nick”.

I messaggi di tipo {'M',”nick mittente”,”nick destinatario”,””} rappresentano dei messaggi che un utente vuole inviare ad un altro.

Quando il server riceve un messaggio di tipo I esegue le seguenti operazioni:

• controlla se l'utente nick è presente nella lista, in caso negativo ignora le richieste successive

• in caso affermativo:

• mette il flag di stato del nick a connesso e crea una FIFO, se non esiste già, il cui nome corrisponde al nick specificato nel messaggio, questa FIFO rappresenta il mezzo da cui il client potrà leggere i messaggi inviati dagli altri utenti.

• se esiste un file il cui nome corrisponde al nick legge il suo contenuto (struct messaggio) e lo scrive sulla FIFO e poi elimina questo file.

Quando il server riceve un messaggio di tipo M esegue le seguenti operazioni:

• controlla se esiste una FIFO il cui nome corrisponde al ricevente, in quel caso scrive l'intero messaggio su questa FIFO, altrimenti aggiunge l'intero messaggio in un file avente come nome nome quello del ricevente.

Quando il server riceve un messaggio di tipo F esegue le seguenti operazioni:

• mette il flag di stato del nick a non connesso e cancella la FIFO il cui nome corrisponde al nick specificato nel messaggio

Client

Ogni client viene eseguito specificando sulla linea comando il proprio nickname.

Il programma crea un processo figlio.

Il padre scrive sulla FIFO “canale”, il figlio legge dalla FIFO che corrisponde al proprio nickname.

Il padre esegue le seguenti operazioni:

• scrive sulla FIFO “canale” il proprio messaggio di tipo I

• ciclicamente legge da tastiera una frase, compone una struct messaggio di tipo M e la scrive sulla FIFO “canale” fino quando la frase letta da tastiera corrispone a “fine”

• scrive sulla FIFO “canale” il proprio messaggio di tipo F

• fa terminare il proprio figlio Il figlio esegue le seguenti operazioni:

• legge ciclicamente dalla FIFO che corrisponde al proprio nickname e visualizza mittente e messaggio.

Riferimenti

Documenti correlati

Scrivere un metodo che, dati un array di interi a (contenente almeno due elementi), un intero v ed un intero k (k>0), restituisce true se in a esistono almeno k coppie di interi,

The most simple use case for FIFOs is synchronization between 2 processes: 1 reading from + 1 writing to the FIFO. FIFOs have an unusual open semantics built

Écrivez un programme occurrences qui prend en paramètre une expression régulière r et n noms de fichiers puis qui affiche le nombre total d’occurrences de r dans les n fichiers

Inadeguata secrezione di ormoni della corteccia surrenale, in particolare di cortisolo, come conseguenza della distruzione di più del 90% della corticale del

L’accesso alla FIFO avverrà dopo la sua apertura che può essere fatta con la fopen, specificandone il nome e se il programma vorrà leggere o scrivere sulla FIFO,

Il programma dovrà creare due figli, il primo legge ciclicamente da tastiera delle frasi e le scrive sulla prima FIFO, il secondo legge ciclicamente dalla seconda FIFO e

➢ il padre deve richiamare la funzione media_file passando come argomento il valore argv[2], visualizzare il proprio pid e l’esito della chiamata

Write a function that takes a string, and reorders all the letters in alphabetic order... The function contains