private void assignSessionThenSendMethod <T>(BMethodRequest methodRequest, BAsyncResultIF <T> asyncResult) { if (authentication != null) { int typeId = getObjectTypeId(methodRequest); BAsyncResult <Object> sessionResult = (session, ex) => { if (ex != null) { bool relogin = isReloginException(ex, typeId); if (relogin) { reloginAndRetrySend(methodRequest, asyncResult); } else { asyncResult.setAsyncResult(default(T), ex); } } else { methodRequest.setSession(session); send(methodRequest, asyncResult); } }; authentication.getSession(null, typeId, sessionResult); } else { send(methodRequest, asyncResult); } }
public IAsyncResult BeginSend <T>(BMethodRequest methodRequest, AsyncCallback callback, object state) { BAsyncProgModel <T> asyncResult = new BAsyncProgModel <T>(callback, state); BAsyncResultReceiveMethod <T> outerResult = new BAsyncResultReceiveMethod <T>(asyncResult); assignSessionThenSendMethod(methodRequest, outerResult); return(asyncResult); }
public virtual void recv(BTargetId clientTargetId, Object methodObj, BAsyncResultIF <Object> methodResult) { try { BMethodRequest method = (BMethodRequest)methodObj; BRemote remote = null; int remoteId = method.getRemoteId(); BTargetId serverTargetId = this.transport.getTargetId(); // Die Target-ID aus dem Header ist gleich der Target-ID des BServer-Objekts // für einen normalen Client-Server-Request if (clientTargetId.Equals(serverTargetId)) { remotes.TryGetValue(remoteId, out remote); } else { // Es wird eine andere Target-ID angesteuert. // Ermittle hier die BRemote-Schnittstelle dieser Target-ID. // Sie kommt möglicherweise von einem anderen Client. remote = this.transport.getRemoteRegistry().getRemote(serverTargetId, clientTargetId, remoteId); } if (remote != null) { method.execute(remote, methodResult); } else { BException ex = new BException(BExceptionC.SERVICE_NOT_IMPLEMENTED, "Service not implemented: remoteId=" + remoteId); methodResult.setAsyncResult(null, ex); } } catch (Exception e) { methodResult.setAsyncResult(null, e); } }
private void reloginAndRetrySend <T>(BMethodRequest methodRequest, BAsyncResultIF <T> asyncResult) { try { BAsyncResult <bool> loginResult = (ignored, ex) => { if (ex != null) { asyncResult.setAsyncResult(default(T), ex); } else { assignSessionThenSendMethod(methodRequest, asyncResult); } }; negotiateProtocolClient(BAsyncResultHelper.FromDelegate(loginResult)); } catch (Exception ex) { asyncResult.setAsyncResult(default(T), ex); } }
public void sendMethod <T>(BMethodRequest methodRequest, BAsyncResult <T> asyncResult) { BAsyncResultReceiveMethod <T> outerResult = new BAsyncResultReceiveMethod <T>(asyncResult); assignSessionThenSendMethod(methodRequest, outerResult); }
public MyAsyncResultRelogin(BTransport transport, BMethodRequest methodRequest, BAsyncResultIF <T> innerResult) { this.transport = transport; this.methodRequest = methodRequest; this.innerResult = innerResult; }