Pages: [1]   Go Down
Print
Author Topic: bozza sistema SePi bancomat/client  (Read 729 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.800



WWW
« on: 05-05-2016, 18:06:28 »

type pinManagerProt: ?integer.+{ok:end, no:end}

type bancomatProt =
    ?integer.
        +{success:
            &{deposit: ?integer.!integer.end,
              withdrawal: !integer.
                             +{dispense: end,
                               overdraw: end}
              },
           retry: bancomatProt
           failure: end}

type bankAsBmProt = +{success:
                              &{deposit: ?integer.!integer.end,
                                withdrawal: !integer.
                             +{dispense: end,
                               overdraw: end}
                      }

type finalizationProt = ?(bankAsBmProt).+{acceptMoney:!integer.end,
                                          dispenseMoney:!integer.end
                                          error:end
                                          }



type clientProt = dualof bancomatProt

def bancomat (schan: BancomatProt,trials:integer) =
       schan?pin.
       new client_PinManCh pinMan_ClientCh: dualof pinManagerProt
       pinSessionManager!pinMan_ClientCh |
       client_PinManCh!pin.case client_PinManCh of
                              ok -> schan select success.
                                    {new finc fins : finalizationProt
                                     bmSession!finc.
                                     finc!schan.
                                     case finc of
                                       acceptMoney -> ?integer
                                       dispenseMoney -> ?integer}
                                   
                              no -> if trials>=3
                                      then schan select failure
                                      else schan select retry.
                                                 bancomat!(schan,(trials+1))
       
                                                                                 
def pinManager (pin1:integer,cc1:integer,pin2:integer,cc2:integer) =
    def pinSessionManager (ch: pinManagerProt) =
        ......
type bmSessionType = *? .....
 
def bank (numcc1:integer, owner1:string, amount1:integer,
          numcc2:integer, owner2:string, amount2:integer) =





     bmSession*?fins) =   
          fins?schan.
          case schan of
                                      deposit ->
                                         
                                         
                                      withdrawal ->
       
 

         
       


def client (pin:integer, cchan: clientProt)  =

cChan!pin.
   case cchan of
     success -> ....

     retry   -> client!(pin,cchan)

     failure -> {}

bank!(001,Davide,5000,002,Gianluca,5000) |

pinManager!(12345,001,54321,002) |
   
new  clientCh bancomatCh : clientProt
client!(38664,clientCh)
bancomat!(bancomatCh,0)
« Last Edit: 17-05-2016, 16:10:08 by Franco Barbanera » Logged
Pages: [1]   Go Up
Print
Jump to: