public AppAuthContext(login loginForm) { this.loginForm = loginForm; this.me = new Me(); this.appAuthState = new IntialState(); }
public void authenticate(String username, String password) { lock (appAuthState) { this.appAuthState.authenticate(this); this.appAuthState = new AuthenticatingState(); } advBus = RabbitHutch.CreateBus("host=207.148.88.116:5672; virtualHost=created-docs-vhost; username=created-docs-dev; password=rlaehdgus", x => x.Register(c => new AdvancedBusEventHandlers((s, e) => { /*onConnected, 연결성공*/ }, (s, e) => { /*onDisconnected, 연결이 끊김, 기본적으로 라이브러리에셔 여러번 retry함.*/ var advancedBus = (IAdvancedBus)s; advancedBus.Dispose(); this.disconnect(); }))).Advanced; String clientId = getMacAddress(); // exchange는 메세지를 분류해 주는 곳으로, 이미 있는 exchange를 새로 declare해도 문제 없다. var exchange = advBus.ExchangeDeclare("created-docs.direct", ExchangeType.Direct); //ExchangeDeclare는 client가 사용할 임시 큐(접속이 끊기면 없어짐)를 생성한다. 여기서 선언한 큐는 auth 메세지에 대한 답장을 받기위해 쓰인다. //서버가 이 큐로 답장 메세지를 보낸다. var queue = advBus.QueueDeclare( "client." + clientId + ".auth", durable: false, exclusive: false, autoDelete: true ); // 이 큐는 다른 곳에서 로그인 했을 때, 이 클라이언트로 접속금지 메세지를 보내기 위해 선언한다. 이것도 임시 큐 var unauthQueue = advBus.QueueDeclare( "client." + clientId + ".unauth", durable: false, exclusive: false, autoDelete: true ); // unauthQueue와 created-docs.direct exchange를 bind 해준다. //서버에서 default exchange 발송해야한다. 이렇게 bind하면 auto delete가 안된다. //advBus.Bind(exchange, unauthQueue, "client." + clientId + ".unauth"); lock (me) { me.username = username; me.setEncryptedPasswordByPalinPassword(password); Authentication appAuthMessage = new Authentication { username = me.username, password = me.encryptedPassword, type = Authentication.NORMAL, clientId = clientId }; string jsonMsg = JsonConvert.SerializeObject(appAuthMessage); var body = Encoding.UTF8.GetBytes(jsonMsg); //메세지의 속성을 입력하는 코드 var messageProperties = new MessageProperties(); messageProperties.ContentEncoding = "UTF-8"; //반드시 필요하다. messageProperties.ContentType = "application/json"; //반드시 필요하다. messageProperties.MessageId = System.Guid.NewGuid().ToString(); // Optional 메세지 관리를 위한 것 messageProperties.CorrelationId = System.Guid.NewGuid().ToString(); // 답장을 위해 반드시 필요하다. messageProperties.ReplyTo = queue.Name; // 이 큐로 답장을 보내달라는 것으로 반드시 필요하다. var msg = new Message <Authentication>(appAuthMessage); msg.SetProperties(messageProperties); advBus.Publish( exchange, "app.auth", false, message: msg ); } // 해당 큐 (여기서는 아까 만든 답장을 위한 임시큐) 로 메세지가 도착하면 처리하는 코드 advBus.Consume(queue, (bbody, properties, info) => Task.Factory.StartNew(() => { string message = Encoding.UTF8.GetString(bbody); AuthenticationResult authResult = JsonConvert.DeserializeObject <AuthenticationResult>(message); string authResultCode = authResult.resultCode; if (authResultCode.Equals(AuthenticationResult.AUTHORIZED)) { authoirze(); } else if (authResultCode.Equals(AuthenticationResult.NEED_TO_ACTIVATE_NEW)) { authenticateActivatingNew(); } else if (authResultCode.Equals(AuthenticationResult.UNAUHORIZED)) { unauthorize(); } else if (authResultCode.Equals(AuthenticationResult.ERROR)) { error(); } else { error(); } })); advBus.Consume(unauthQueue, (bbody, properties, info) => Task.Factory.StartNew(() => { //server makes this client stop string message = Encoding.UTF8.GetString(bbody); //do something with message unauthorize(); })); }
public void setAppAuthState(AppAuthState appAuthState) { this.appAuthState = appAuthState; }