public bool Equals(UniFeederAuthorizationOption obj) { if (obj is null) { return(false); } return( obj.Login == this.Login && obj.Password == this.Password ); }
private void FillAuth(IRxSocketClient accept, UniFeederAuthorizationOption auth, string message) { if (string.IsNullOrEmpty(auth.Login)) { auth.Login = message; "> Password: ".ToUniFeederByteArray().SendTo(accept); return; } if (string.IsNullOrEmpty(auth.Password)) { auth.Password = message; return; } }
private bool Authentificate(UniFeederAuthorizationOption auth) { return(option.Value.Authorization.Any(a => a.Equals(auth))); }
protected void UniFeederServer(IRxSocketServer server) { server.AcceptObservable.Subscribe(onNext: accept => { @"> Universal DDE Connector 9.00 > Copyright 1999 - 2008 MetaQuotes Software Corp. > Login: "******"accepted new client {0}", clientId); accept.ReceiveObservable.ToUniFeederStrings().Subscribe( onNext: message => { logger.LogDebug("client: {0} receive message: {1}", clientId, message); if (!clients.ContainsKey(clientId) && DateTimeOffset.UtcNow >= ended) { accept.Dispose(); logger.LogInformation("a non-authenticated client {0} is disconnected after 5 seconds inactivity", clientId); return; } if (!auth.IsFilled) { FillAuth(accept, auth, message); } if (auth.IsFilled) { if (Authentificate(auth)) { if (clients.TryAdd(clientId, accept)) { "> Access granted".ToUniFeederByteArray().SendTo(accept); } else { switch (message) { case "> Ping": "> Ping".ToUniFeederByteArray().SendTo(accept); logger.LogDebug("send Ping to client {0}", clientId); break; default: break; } } } else { "> Access denied".ToUniFeederByteArray().SendTo(accept); accept.Dispose(); } } }, onError: e => { RemoveClient(clientId, 5); logger.LogError("client: {0} rxsocket error {1}. client disposed. current clients: {2}", clientId, e.Message, clients.Count); }, onCompleted: () => { RemoveClient(clientId, 5); logger.LogInformation("client: {0} rxsocket complited. client disposed. current clients: {1}", clientId, clients.Count); } ); }); }