You are not logged in.
Pages: 1
Hi guys, please forgive me if what I'm posting here is irrelevant. I've created an educational project "ATM machine simulation" in SmartMobileStudio with withdrawal, deposit, transfer, bill payment, extract, balance options enabled.
See the Live Project at: ATM Machine
If you like to test, use the PIN=1234
I have heard about Event Sourcing before in the forum. I'm wondering based on this example if will give someone some inspiration to create a demo about this.
I've been considering using Event sourcing in mORMot, but unfortunately, I didn't have a clue how to start, basically,
I know that an "Event" is something that happend in the past; you create an event for every state change of the object, something like:
BankAccountCreated --> DepositPerformed --> OwnerChanged --> WithdrawalPerformed
id: 12 accountID: 12 accountId: 12 accountId: 12
owner: John amount: 20 newOwner: Jane amount: 10
Using event sourcing, since every change to state is traceable, we can:
- perform mining/analysing financial transactions to track terrorists;
- retroactive event, to make easy to do undo things; track "who did that", "when do that";
- you know which items customers removed from their shopping cart.
Any idea?
Offline
I would like to use a interface-based service "Test" method to send a callback to the server.
I'd like to receive the callback event.
Does anyone can shed some light on this?
type
IMyCallback = interface(IInvokable)
['{5CD49AB1-D5A3-4059-B287-25E939DD2A0B}']
procedure EventCalledFromServer(const withAValue: integer);
end;
IMyService = interface(IInvokable)
['{FB31BF33-38C7-45AE-9511-6AC727ADC4F4}']
procedure MethodWithCallback(const anyParameter: variant; const TheCallBack: IMyCallback);
end;
type
TMyServiceClient = class(TInterfacedObject,IMyCallback)
protected
fRest: TSQLRestClient;
// here the callback will point back to "self", so IMyCallback is implemented now
// but you may set a callback from any another class implementing IMyCallback
procedure EventCalledFromServer(const withAValue: integer);
public
procedure Test;
end;
procedure TMyServiceClient.Test;
var MyService: IMyService;
begin
if fRest.Services.Resolve(IMyService,MyService) then
MyService.MethodWithCallback(1234,self);
end;
procedure TMyServiceClient.EventCalledFromServer(const withAValue: integer);
begin // will be called back by the server
end;
type
TMyServiceServer = class(TInterfacedObject,IMyService)
protected
fCallback: IMyCallback; // for delayed call, in sicClientDriven mode
public
procedure MethodWithCallback(const anyParameter: variant; const TheCallBack: IMyCallback);
procedure AnotherMethod;
end;
procedure TMyServiceServer.MethodWithCallback(const anyParameter: variant; const TheCallBack: IMyCallback);
begin
TheCallBack.EventCalledFromServer(1234);
fCallback := TheCallBack;
end;
procedure TMyServiceServer.AnotherMethod;
begin
if assigned(fCallback) then
fCallBack.EventCalledFromServer(5678);
end;
Offline
Are you using web socket based server or http.sys? AFAIK callbacks are only possible for web socket server.
Offline
No. This pattern (use interface parameters to interface-based service methods to send a callback to the server) can also be via client TSQLRestClient (which may be over HTTP).
{ login }
GET /root/TimeStamp HTTP/1.1
GET /root/Auth?UserName=Supervisor HTTP/1.1
GET /root/Auth?UserName=Supervisor&Password=e20f974a72b2e457d4d1b070ee7a8130e4e34d4fa2bd50422c684f3281917a84&ClientNonce=7218250DB57A2F308A8E4274E0859CB23F8572D76A6244C1B0FA8B28C451F421 HTTP/1.1
GET /root/TimeStamp?session_signature=012B5CCBF1452A52B3B4A862 HTTP/1.1
{ ServiceDefine on the client side }
POST /root/MyOtherService._contract_?session_signature=012B5CCBF1452A53A3E3DCBD HTTP/1.1
[]
POST /root/MyOtherCallback._contract_?session_signature=012B5CCBF1452A53674BAAE9 HTTP/1.1
[]
{ call the Withdrawal client method which will call the server callback MethodWithCallback(amount,self) }
POST /root/MyOtherCallback.Withdrawal?session_signature=012B5CCBF1452A53332FF6F1 HTTP/1.1
[2000]
{ client release }
GET /root/Auth?UserName=Supervisor&Session=19619019&session_signature=012B5CCBF1452A55EEFF2E27 HTTP/1.1
I can't find a way to invoke the Withdrawal method on the ajax client; for initialization of the registered interface, for instance, i believe the resolve method is required on the client side to work.
Offline
Pages: 1