Italian DOTTE DISQUISIZIONI SU APP RISTORANTE

Star-Dust

Expert
Licensed User
Longtime User
Era un periodo che avevo poco da fare e ho pubblicato molte app sceme. Ma ne sto cercando di peggiori.

I video m i sembrano ancora grezzi, bontà tua che ti piacciano.

Molte App le ho rimosse, qualcuno le ga tolte il signor Google dietro lamentela di WhatsApp... mi accusano di plagio... perché ho scritto la parolz whastapp che ha il copyright...
 

Star-Dust

Expert
Licensed User
Longtime User
L'altra l'ho chiamata cameriere ..... cmq può darsi...cmq siccome non rendono ... poco importa cosa costano, altre app sceme rendono meglio. Mi voglio concentra su quelle.

Ma mica penserete che campo con Google Play, lo considero un passatempo, altrimenti li venderei a 100euro l'una.. e si lamenterebbero.... comunque ho sperimentato che mettendo le app gratuite e le funzioni principali a pagamento e/o mettete uno spot pubblicitario, rende di più che mette le app a pagamento
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Avendo esaurito gli argomenti commerciale passiamo quelli tecnici. Io ho usato il socket connessione TCP.

La cucina che funziona da server riceve le Comandè da ogni app cameriere. Verifica la correttezza della stringa e se è completa o interrotta la inserisce in una pila di tipo fifo, che viene elaborata da un servizio che controlla questa vita la volta al secondo.

Questo servizio elabora il comando, divide il comando dai parametri e se sono delle domande nuove li visualizza lo schermo della cucina virgola se sono delle correzioni di segnale alla cucina, se invece una richiesta di conto invia il tutto alla cassa.

Se è un cameriere che si sta connettendo per la prima volta gli invia tutto il menù in modo che i suoi archivi siano aggiornati con i nuovi prezzi e gli chiede di indicare il suo nome moto che gli assegni tavoli.

Per realizzarlo ho preso il codice da una chat b4a che aveva pubblicato se non erro EREL e mi sono studiato come fare le connessione fra client e server in multi utenza.
 

Star-Dust

Expert
Licensed User
Longtime User
Non ho avuto nessun problema di riavvio di malfunzionamenti l'unico problema che si hanno è proprio la connessione tra client e il server, che cade, le stringhe non arrivano per intere, ci sono una marea di problemi di questo genere.

Ovviamente se lavora una stand-alone tutti questi problemi si risolvono perché ognuno stampa del proprio POS nella stampante WiFi, in alternativa invia un'email con un pdf alla cucina e tutto funziona perfettamente senza nessun problema punto i problemi nascono appena mette il server.

Ho pensato anche a un sistema di diagnosi per capire se i camerieri erano ancora connessi, e il server invia ogni 60 secondi un ping e se l'App cameriere non risponde lui lo sconnette
 

LucaMs

Expert
Licensed User
Longtime User
Non ho avuto nessun problema di riavvio di malfunzionamenti l'unico problema è che si hanno è proprio la connessione tra client e il server, che cade che le stringhe non arrivano per intere e ci sono una marea di problemi di questo genere.
Questo è il principale motivo per il quale ancora non ho pubblicato la mia app (gioco). Volendo prevedere non solo disconnessioni ma anche rallentamenti, mi sono bloccato più volte e per mesi ho "sospeso".

In realtà non uso proprio i socket ma i websocket, che consentono una connessione "fissa" (sempre finché non cada o rallenti per mancanza di segnale wifi).

Del resto, anche inviando un'email hai lo stesso problema, se il wifi non funziona bene o il client (come ad esempio quel fetente del mio smartphone) sia poco sensibile.

Sbaglierò, ma tra le tante possibilità preferisco sempre un webserver scritto in B4J, anche in confronto a MQTT.
 

Star-Dust

Expert
Licensed User
Longtime User
I problemi duplicazione li ho risolti inviando un numero identificativo di quella comanda. Ogni app cameriere conserve in un SQL una copia della comanda ed è numerata da un ID all'interno del sql. Questo ID viene inviato anche al server e corrisponde a quello specifico ordine e ha uno specifico rigo dell'ordine

L'ID è una chiave univoca dall'interno del sql di ogni cameriere. All'interno del server nell'archivio sql il nome del cameriere insieme all'ID rendono il record univoco.
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Ho usato gli strumenti che conoscevo, e MQTT non era fra quelli e nemmeno websocket che non so cosa sia nemmeno adesso.

Ma un SEVER MQTT non dev'essere installato su un pc?

Però se mandi un email e manca la connessione, appena la connessione riparte l'email in attesa viene inviata
 

LucaMs

Expert
Licensed User
Longtime User
Perché tu cosa hai usato? In che modo i socket?

Un server serve(r) sempre, fà comodo poter avere un sw che controlli centralmente.

I websocket, almeno dal mio punto di vista, sono fantastici o, meglio, è fantastico poter creare un webserver MOLTO facilmente usando b4j e collegarvisi tramite app create con B4A; stesso linguaggio, massima semplicità.

Prova ad installare uno degli esempi di webserver b4j, ad esempio la Chat.
 

Star-Dust

Expert
Licensed User
Longtime User
Questo é il lato server, ovviamente è un Service che si avvia quando apri l'App (solo FirstTime=True per intenderci )

B4X:
    Dim AscoltoServer As ServerSocket
    Dim ListaConnessiAstream As List
    Dim ListaConnessiInfo As List

    Dim TimElabora As Timer

    Dim Cht As String = Chr(8)

End Sub

Sub Service_Create
    If AscoltoServer.IsInitialized=False Then
        AscoltoServer.Initialize(porta,"AscoltoServer")
        ListaConnessiAstream.Initialize
        ListaConnessiInfo.Initialize
    End If
End Sub

Sub Service_Start (StartingIntent As Intent)
    AscoltoServer.Listen
    TimElabora.Initialize("TimElabora",1000)
    TimElabora.Enabled=True
End Sub

Sub AscoltoServer_NewConnection (Successful As Boolean, NewSocket As Socket)
    If Successful Then
        Dim Stream1 As AsyncStreams
        Stream1.Initialize(NewSocket.InputStream,NewSocket.OutputStream,"AStreams")
        'Stream1.Write("ID".GetBytes("UTF8"))
        ListaConnessiAstream.Add(Stream1)
        Dim Elem As TElementi
        Elem.Nome=ListaConnessiAstream.Size
        Elem.DatiRicevuti=""
        Elem.Ping=0
        ListaConnessiInfo.Add(Elem)
        ToastMessageShow("Cameriere connesso n." & ListaConnessiAstream.Size, False)
        CallSub(Main,"AggiornaConnessioni")
    Else
        Log("Errore connessione server")
    End If

    AscoltoServer.Listen
End Sub

Quindi sta in ascolto, appena riceve una connessione inizializza una variabile Stream e lo aggancia e memorizza in una lista la variabile per non perderla e in una seconda lista le informazioni di quella connessione, cameriere, ip, ping inviato e/o ricevuto, cavoli vari

e infine quando ricevei dati dal cameriere

B4X:
Sub AStreams_NewData (Buffer() As Byte)
    Dim Dati As String
    Dim BC As ByteConverter
    Dim Stream1 As AsyncStreams

    Stream1=Sender
    Dati=BC.StringFromBytes(Buffer,"UTF-8")

    Try
        For i=1 To ListaConnessiAstream.Size
            If Stream1=ListaConnessiAstream.Get(i-1) Then
                Dim Elem As TElementi
                Elem=ListaConnessiInfo.Get(i-1)
                Elem.DatiRicevuti=Elem.DatiRicevuti & Dati
            End If
        Next
    Catch
        Log(LastException.Message)
        End Try
 
    End Sub

controlla chi la sta mandando e nel buffer di quel cameriere mette la stringa ricevuta che verrà poi impilata nella FIFO e elaborata

lato client
B4X:
            Dim ClientSock As Socket

            Ip=EditTextIP.Text
            ClientSock.Initialize("ClientSock")
            ClientSock.Connect(Ip,porta,20000)

B4X:
Sub ClientSock_Connected(ConStatus As Boolean)

    If ConStatus = True Then
        LabelInformazioni.Text="Sei connesso alla cucina"
        AStreams.Initialize(ClientSock.InputStream, ClientSock.OutputStream, "AStreams")
     Else
        Msgbox("Assicurati di aver inserito IP-Addr correttamente" & Chr(10) & LastException.Message, "Connessione rifiutata")
        LabelInformazioni.Text="Non sei connesso alla cucina"
    End If
End Sub

Amen. Fine. The End.

MQTT é cosi semplice?
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Non conosco il webserver b4j... ma gira su android? Su pc? E java e gira su tutto?

Dovresti installare le app android sui client dal Play Store e sul server fargli scaricare e installare un web server?

Forse possibile farlo i clienti in locale ma in remoto?

Soprattutto come faccio a staccare l'avviso dei post nelle email che me le sta intasando?
 

LucaMs

Expert
Licensed User
Longtime User
Non conosco il webserver b4j... ma gira su android? Su pc? E java e gira su tutto?
Gira su PC, con base Java, quindi su qualunque sistema operativo (pc).

Dovresti installare le app android sui client dal Play Store e sul server fargli scaricare e installare un web server?
Puoi pubblicare le app Android su Google Play ma il server, essendo appunto un sw che gira su PC, dovrai farlo scaricare da altrove o installarlo tu. Puoi anche fare in modo di gestire tu il server (so che non è il caso del ristorante, è il mio caso e forse più comune), su un tuo pc connesso ad Internet o su un VPS affittato (macchina virtuale che trovi "a noleggio" su Internet, come i classici spazi WEB).

Forse possibile farlo i clienti in locale ma in remoto?
Questa non l'ho capita

Soprattutto come faccio a staccare l'avviso dei post nelle email che me le sta intasando?



Nella dialog che compare, togli la spunta da:

"and receive email notifications of replies"
 

Star-Dust

Expert
Licensed User
Longtime User
Ok, grazie.

Intendevo che installare un server MQTT forse conviene se hai un cliente che ti contatta e tu sei sul posto e fai il lavoro di installazione in prima persona.

Un cliente remoto, o distante, dovresti spiegargli come fare a installare da solo il server, su play store è impraticabile

Il mio codice su come uso i socket ti ha fugato i dubbi?
 

LucaMs

Expert
Licensed User
Longtime User

Star-Dust

Expert
Licensed User
Longtime User
Guardate che la cosa interessante nell'esempio postato da Luca é una. Che non bisogna mettere l'indirizzo IP perché lo invia con protocollo UDP alla rete. Una specie di PING.
Che è una cosa che pensavo proprio ieri. Poi usare MQTT o un altro server o farselo da solo, è indifferente almeno per me.
Ovviamente chi non sa crearselo ha bisogno di un codice già pronto, meglio se ha un protocollo facile da implementare nel lato client.

Solo che cosi bisogna mettere un protocollo di sicurezza, una password per identificare i cameriere. Perché un cliente spiritoso che si scarica l'App dal PlayStore senza conoscere la porta e l'indirizzo del Server e invia comande
 

Star-Dust

Expert
Licensed User
Longtime User
Sarebbe interessante implementare un server e relativo protocollo specifico per la ristorazione.
 

Star-Dust

Expert
Licensed User
Longtime User
Cmq senza avere websocket nella mia App c'é un controllo di validità del messaggio e altrimenti una richiesta di reinvio. Come credo succeda in tutte le trasmissioni dati, il più classico esempio di controllo trasmissione è il bit di parità, ma non adatto a questo caso.
Inoltre la caduta di connessione e riconnessione automatica è gestibile senza troppi problemi. Per capire "l'impossibilità di connessione" come scritto prima ho usato il sistema del ping che in 30 secondi "capisco" se sono connesso o meno. Inoltre con la riconnessione il client reinvia tutte le "stringhe" di cui non ha ricevuto conferma

Il riferimento al ristorante sarà accademico, ma siccome ci mangio preferisco che le cose funzionino bene, anzi vorrei fare una convenzione con chi si installa la mia App: Io gli concedo l'app gratis e loro mi fanno mangiare tutti i giorni da loro aggrats. Un bel paradigma secondo me . Mi manca qualcosa per l'affito e l'Enel il resto e fatto. Ho divagato anche io
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Cmq é una mia deformazione, ai prodotti già pronti e impacchettati preferisco quelli che mi costruisco da solo e conosco ogni sua parte. Magari é meglio lavorare su un prodotto pronto.
Come diceva il mio professore 25 anni fà: so costruirmi oscilloscopio partendo da resistenze, transistor e integrati ... ma meglio comprarlo già pronto.

Abbiate pazienza io ho imparato a programmare con il GWBasic e Turbo pascal 3.0
 
Reactions: udg
Cookies are required to use this site. You must accept them to continue using the site. Learn more…