public string AddDistributedObjectListener(IDistributedObjectListener listener) { var isSmart = _client.GetClientConfig().GetNetworkConfig().IsSmartRouting(); var request = ClientAddDistributedObjectListenerCodec.EncodeRequest(isSmart); var context = new ClientContext(_client.GetSerializationService(), _client.GetClientClusterService(), _client.GetClientPartitionService(), _client.GetInvocationService(), _client.GetClientExecutionService(), _client.GetListenerService(), _client.GetNearCacheManager(), this, _client.GetClientConfig()); DistributedEventHandler eventHandler = delegate(IClientMessage message) { ClientAddDistributedObjectListenerCodec.EventHandler.HandleEvent(message, (name, serviceName, eventType) => { var _event = new LazyDistributedObjectEvent(eventType, serviceName, name, this); switch (eventType) { case DistributedObjectEvent.EventType.Created: listener.DistributedObjectCreated(_event); break; case DistributedObjectEvent.EventType.Destroyed: listener.DistributedObjectDestroyed(_event); break; default: Logger.Warning(string.Format("Undefined DistributedObjectListener event type received: {0} !!!", eventType)); break; } }); }; return(context.GetListenerService().RegisterListener(request, m => ClientAddDistributedObjectListenerCodec.DecodeResponse(m).response, ClientRemoveDistributedObjectListenerCodec.EncodeRequest, eventHandler)); }
private void ManagerAuthenticator(ClientConnection connection) { Logger.Finest("Authenticating against the owner node"); var ss = _client.GetSerializationService(); string uuid = null; string ownerUuid = null; if (_principal != null) { uuid = _principal.GetUuid(); ownerUuid = _principal.GetOwnerUuid(); } ClientMessage request; if (_credentials is UsernamePasswordCredentials) { var usernamePasswordCr = (UsernamePasswordCredentials)_credentials; request = ClientAuthenticationCodec.EncodeRequest(usernamePasswordCr.GetUsername(), usernamePasswordCr.GetPassword(), uuid, ownerUuid, true, ClientTypes.Csharp, _client.GetSerializationService().GetVersion(), VersionUtil.GetDllVersion()); } else { var data = ss.ToData(_credentials); request = ClientAuthenticationCustomCodec.EncodeRequest(data, uuid, ownerUuid, false, ClientTypes.Csharp, _client.GetSerializationService().GetVersion(), VersionUtil.GetDllVersion()); } IClientMessage response; try { var invocationService = (ClientInvocationService)_client.GetInvocationService(); response = ThreadUtil.GetResult(invocationService.InvokeOnConnection(request, connection)); } catch (Exception e) { throw ExceptionUtil.Rethrow(e); } var result = ClientAuthenticationCodec.DecodeResponse(response); if (result.address == null) { throw new HazelcastException("Could not resolve address for owner node."); } var member = new Member(result.address, result.ownerUuid); _principal = new ClientPrincipal(result.uuid, result.ownerUuid); connection.Member = member; connection.SetOwner(); connection.ConnectedServerVersionStr = result.serverHazelcastVersion; }
public string AddDistributedObjectListener(IDistributedObjectListener listener) { var isSmart = _client.GetClientConfig().GetNetworkConfig().IsSmartRouting(); var request = ClientAddDistributedObjectListenerCodec.EncodeRequest(isSmart); var context = new ClientContext(_client.GetSerializationService(), _client.GetClientClusterService(), _client.GetClientPartitionService(), _client.GetInvocationService(), _client.GetClientExecutionService(), _client.GetListenerService(), this, _client.GetClientConfig()); //EventHandler<PortableDistributedObjectEvent> eventHandler = new _EventHandler_211(this, listener); DistributedEventHandler eventHandler = delegate(IClientMessage message) { ClientAddDistributedObjectListenerCodec.AbstractEventHandler.Handle(message, (name, serviceName, type) => { var ns = new ObjectNamespace(serviceName, name); ClientProxy proxy; _proxies.TryGetValue(ns, out proxy); if (proxy == null) { proxy = GetProxy(serviceName, name); } var _event = new DistributedObjectEvent(type, serviceName, proxy); if (DistributedObjectEvent.EventType.Created.Equals(type)) { listener.DistributedObjectCreated(_event); } else { if (DistributedObjectEvent.EventType.Destroyed.Equals(type)) { listener.DistributedObjectDestroyed(_event); } } }); }; //PortableDistributedObjectEvent return(context.GetListenerService().RegisterListener(request, m => ClientAddDistributedObjectListenerCodec.DecodeResponse(m).response, ClientRemoveDistributedObjectListenerCodec.EncodeRequest, eventHandler)); }
private void ClusterAuthenticator(ClientConnection connection) { var ss = _client.GetSerializationService(); var clusterService = (ClientClusterService)_client.GetClientClusterService(); var principal = clusterService.GetPrincipal(); var uuid = principal.GetUuid(); var ownerUuid = principal.GetOwnerUuid(); ClientMessage request; var usernamePasswordCr = _credentials as UsernamePasswordCredentials; if (usernamePasswordCr != null) { request = ClientAuthenticationCodec.EncodeRequest(usernamePasswordCr.GetUsername(), usernamePasswordCr.GetPassword(), uuid, ownerUuid, false, ClientTypes.Csharp, _client.GetSerializationService().GetVersion(), VersionUtil.GetDllVersion()); } else { var data = ss.ToData(_credentials); request = ClientAuthenticationCustomCodec.EncodeRequest(data, uuid, ownerUuid, false, ClientTypes.Csharp, _client.GetSerializationService().GetVersion(), VersionUtil.GetDllVersion()); } IClientMessage response; try { var future = ((ClientInvocationService)_client.GetInvocationService()).InvokeOnConnection(request, connection); response = ThreadUtil.GetResult(future); } catch (Exception e) { throw ExceptionUtil.Rethrow(e); } var rp = ClientAuthenticationCodec.DecodeResponse(response); if (rp.address == null) { throw new HazelcastException("Could not resolve address for member."); } var member = _client.GetClientClusterService().GetMember(rp.address); if (member == null) { throw new HazelcastException("Node with address '" + rp.address + "' was not found in the member list"); } connection.Member = member; }
private void Authenticate(ClientConnection connection, bool isOwnerConnection) { if (Logger.IsFinestEnabled()) { Logger.Finest(string.Format("Authenticating against the {0} node", isOwnerConnection?"owner":"non-owner")); } string uuid = null; string ownerUuid = null; if (ClientPrincipal != null) { uuid = ClientPrincipal.GetUuid(); ownerUuid = ClientPrincipal.GetOwnerUuid(); } var ss = _client.GetSerializationService(); ClientMessage request; var credentials = _credentialsFactory.NewCredentials(); LastCredentials = credentials; if (credentials.GetType() == typeof(UsernamePasswordCredentials)) { var usernamePasswordCr = (UsernamePasswordCredentials)credentials; request = ClientAuthenticationCodec.EncodeRequest(usernamePasswordCr.Username, usernamePasswordCr.Password, uuid, ownerUuid, isOwnerConnection, ClientTypes.Csharp, ss.GetVersion(), VersionUtil.GetDllVersion()); } else { var data = ss.ToData(credentials); request = ClientAuthenticationCustomCodec.EncodeRequest(data, uuid, ownerUuid, isOwnerConnection, ClientTypes.Csharp, ss.GetVersion(), VersionUtil.GetDllVersion()); } IClientMessage response; try { var invocationService = (ClientInvocationService)_client.GetInvocationService(); response = ThreadUtil.GetResult(invocationService.InvokeOnConnection(request, connection), _heartbeatTimeout); } catch (Exception e) { var ue = ExceptionUtil.Rethrow(e); Logger.Finest("Member returned an exception during authentication.", ue); throw ue; } var result = ClientAuthenticationCodec.DecodeResponse(response); if (result.address == null) { throw new HazelcastException("Could not resolve address for member."); } switch (result.status) { case AuthenticationStatus.Authenticated: if (isOwnerConnection) { var member = new Member(result.address, result.ownerUuid); ClientPrincipal = new ClientPrincipal(result.uuid, result.ownerUuid); connection.Member = member; connection.SetOwner(); connection.ConnectedServerVersionStr = result.serverHazelcastVersion; } else { var member = _client.GetClientClusterService().GetMember(result.address); if (member == null) { throw new HazelcastException(string.Format("Node with address '{0}' was not found in the member list", result.address)); } connection.Member = member; } break; case AuthenticationStatus.CredentialsFailed: throw new AuthenticationException("Invalid credentials! Principal: " + ClientPrincipal); case AuthenticationStatus.SerializationVersionMismatch: throw new InvalidOperationException("Server serialization version does not match to client"); default: throw new AuthenticationException("Authentication status code not supported. status: " + result.status); } }
public int GetPartitionId(object key) { var data = _client.GetSerializationService().ToData(key); return(GetPartitionId(data)); }
internal virtual ISerializationService GetSerializationService() { return(_client.GetSerializationService()); }