예제 #1
0
        private void Ping()
        {
            PingPeer ping = new PingPeer();

            //IBasicProperties proper = channel.CreateBasicProperties();
            //proper.ReplyTo = replyQueueName;
            channel.BasicPublish(exchange: "", routingKey: "rpc_queue", basicProperties: props, body: ping.Serializer());
            //channel.BasicPublish(exchange: "", routingKey: "rpc_queue", basicProperties: props, body: null);
        }
        public ClientsAPI()
        {
            ConnectionFactory factory = new ConnectionFactory()
            {
                UserName = "******", Password = "******", HostName = "192.168.21.130"
            };

            connection     = factory.CreateConnection();
            channel        = connection.CreateModel();
            replyQueueName = channel.QueueDeclare().QueueName;
            consumer       = new EventingBasicConsumer(channel);

            props         = channel.CreateBasicProperties();
            props.ReplyTo = replyQueueName;
            channel.BasicConsume(queue: replyQueueName, autoAck: true, consumer: consumer);
            consumer.Received += (model, ea) =>
            {
                _lastUpDate = DateTime.UtcNow;
                Object obtained = ea.Body.Deserializer();
                switch (obtained)
                {
                case PingPeer p:
                    PingPeer ping = new PingPeer();
                    channel.BasicPublish(exchange: "", routingKey: "MasterClient", basicProperties: props, body: ping.Serializer());
                    break;

                case RegistrationResponse r:
                    RegistrationResponse("after register you should to call login function");
                    break;

                case LoginResponse lr:
                    LoginResponse(lr.SessionId);
                    break;

                case LogoutResponse lr:
                    LogoutResponse();
                    break;

                case LoginBySessionResponse lbsr:
                    LoginBySessionResponse();
                    break;

                case BackError er:
                    BackErrorHandler(er);
                    break;

                default:
                    throw new Exception("Type if different! Server sent unknown type!");
                }
            };
            FirstPing();
        }
        //need only for test or just for first ping(in production first connect will by some another reason)
        private void FirstPing()
        {
            PingPeer ping = new PingPeer();

            channel.BasicPublish(exchange: "", routingKey: "MasterClient", basicProperties: props, body: ping.Serializer());
        }