Ejemplo n.º 1
0
        /// <summary>
        /// Subscription for mission modification
        /// </summary>
        /// <param name="es">Subscriptiob object</param>
        /// <param name="callback">callback for telemetry subscription</param>
        public void SubscribeMission(ObjectModificationSubscription es, System.Action <Mission> callback)
        {
            UnsubscribeAll();
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Mission>(
                                                             (token, exception, mission) =>
            {
                if (token == ModificationType.MT_UPDATE)
                {
                    _messageReceived(mission);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            tokens.Add(st);
            _callback = callback;
        }
Ejemplo n.º 2
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            WriteLog("GetSubscribeReply");
            ReplyInfo        subscribeReply = ReplyHelper.GetSubscribeReply();
            AbstractResponse result;

            if (subscribeReply == null)
            {
                WriteLog("subscribeReply == null");
                result = null;
            }
            else
            {
                WriteLog("取消关注再关注,进入这个事件");
                subscribeReply.Keys = "登录";
                AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

                if (response == null)
                {
                    this.GotoManyCustomerService(subscribeEventRequest);
                }
                response.ToUserName   = subscribeEventRequest.FromUserName;
                response.FromUserName = subscribeEventRequest.ToUserName;
                result = response;
                //取消关注再关注,进入这个事件
                ScanVisitDistributor(subscribeEventRequest, subscribeEventRequest.EventKey);
            }
            return(result);
        }
Ejemplo n.º 3
0
        public void SubscribeTelemtry(Action <int, bool> downlinkCallback)
        {
            _downlinkCb = downlinkCallback;
            _eventSubscriptionWrapper.TelemetryBatchSubscription = new TelemetryBatchSubscription()
            {
                PollingPeriodMilliseconds          = POLLING_INTERVAL,
                PollingPeriodMillisecondsSpecified = true
            };

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connectionService.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;
            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                throw responce.Exception;
            }
            if (responce.Value == null)
            {
                throw new System.Exception("Server return empty response on SubscribeTelemtry event");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getTelemetryNotificationHandler(
                                                             (telemetry) =>
            {
                _onTelemetryBatchReceived(telemetry);
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Example how to activate subscription for server log messages
        /// </summary>
        /// <param name="es"></param>
        /// <param name="callback"></param>
        public void SubscribeLog(ObjectModificationSubscription es, System.Action <VehicleLogEntry> callback)
        {
            _callback = callback;
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <VehicleLogEntry>(
                                                             (token, exception, log) =>
            {
                if (token == ModificationType.MT_CREATE)
                {
                    _oneMessageReceived(log);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            _callback = callback;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Example how to activate subscription to all vehicles telemetry
        /// </summary>
        public void SubscribeTelemtry()
        {
            _eventSubscriptionWrapper.TelemetrySubscription = _telemetrySubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;
            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getTelemetryNotificationHandler(
                                                             (vehicleId, telemetry) =>
            {
                if (!_telemetryDTOList.ContainsKey(vehicleId))
                {
                    _telemetryDTOList.Add(vehicleId, new ServiceActionTelemetry()
                    {
                        ServiceTelemetryDTO = new ServiceTelemetryDTO()
                    });
                }
                _telemetryReceived(vehicleId, telemetry);
            }), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
        }
Ejemplo n.º 6
0
        public void SubscribeTelemtry(Action <int, TelemetryKey, TelemetryValue> cb)
        {
            _tlmCallBack = cb;
            _eventSubscriptionWrapper.TelemetryBatchSubscription = new TelemetryBatchSubscription()
            {
                PollingPeriodMilliseconds          = POLLING_INTERVAL,
                PollingPeriodMillisecondsSpecified = true
            };

            SubscribeEventRequest requestEvent = new SubscribeEventRequest
            {
                ClientId = _connectionService.GetClientId(),

                Subscription = _eventSubscriptionWrapper
            };
            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                throw responce.Exception;
            }
            if (responce.Value == null)
            {
                throw new InvalidOperationException("Server return empty response on SubscribeTelemtry event");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, getTelemetryNotificationHandler(
                                                             (telemetry) =>
            {
                onTelemetryBatchReceived(telemetry);
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Example how to activate subscription o vehicle modifications
        /// </summary>
        /// <param name="es">ObjectModification with vehicle object id</param>
        /// <param name="callBack">callback with received event</param>
        public void SubscribeVehicle(ObjectModificationSubscription es, System.Action <Vehicle> callBack)
        {
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Vehicle>(
                                                             (token, exception, vehicle) =>
            {
                if (token == ModificationType.MT_UPDATE && _vehicleList.ContainsKey(vehicle.Id))
                {
                    _messageReceived(vehicle, _vehicleList[vehicle.Id]);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            tokens.Add(st);
            AddVehicleIdTolistener(es.ObjectId, callBack);
        }
Ejemplo n.º 8
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            string text = "";

            if (subscribeEventRequest.EventKey != null)
            {
                text = subscribeEventRequest.EventKey;
            }
            if (text.Contains("qrscene_"))
            {
                text = text.Replace("qrscene_", "").Trim();
                if (text == "1")
                {
                    if (WeiXinHelper.BindAdminOpenId.Count > 10)
                    {
                        WeiXinHelper.BindAdminOpenId.Clear();
                    }
                    if (WeiXinHelper.BindAdminOpenId.ContainsKey(subscribeEventRequest.Ticket))
                    {
                        WeiXinHelper.BindAdminOpenId[subscribeEventRequest.Ticket] = subscribeEventRequest.FromUserName;
                    }
                    else
                    {
                        WeiXinHelper.BindAdminOpenId.Add(subscribeEventRequest.Ticket, subscribeEventRequest.FromUserName);
                    }
                    return(new TextResponse
                    {
                        CreateTime = System.DateTime.Now,
                        Content = "您正在扫描尝试绑定管理员身份,身份已识别",
                        ToUserName = subscribeEventRequest.FromUserName,
                        FromUserName = subscribeEventRequest.ToUserName
                    });
                }
                ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(subscribeEventRequest.Ticket);
                Globals.Debuglog(text + ":" + subscribeEventRequest.Ticket, "_Debuglog.txt");
                if (!MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName) && scanInfosByTicket != null && scanInfosByTicket.BindUserId > 0)
                {
                    this.CreatMember(subscribeEventRequest.FromUserName, scanInfosByTicket.BindUserId);
                    ScanHelp.updateScanInfosLastActiveTime(System.DateTime.Now, scanInfosByTicket.Sceneid);
                }
            }
            WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName);
            Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();
            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 9
0
        public string GetSubscribedEvent(LoginRequest request)
        {
            string response = "";

            try
            {
                string getResponseJSON = "";
                IList <SubscribeEventRequest> eventList = new List <SubscribeEventRequest>();
                int              count       = 0;
                JObject          jObj        = null;
                FirebaseResponse getResponse = firebaseDBEvent.Get();
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        jObj            = JObject.Parse(getResponseJSON);
                        count           = jObj.Count;
                        foreach (var result in jObj)
                        {
                            SubscribeEventRequest subscribeRequest = null;
                            Console.WriteLine(result.Key);
                            getResponseJSON = result.Value["InstanceId"].ToString();

                            if (!getResponseJSON.ToString().Equals("") && !getResponseJSON.ToString().Equals("null") && !getResponseJSON.ToString().Equals("{}"))
                            {
                                JObject instanceJson = JObject.Parse(getResponseJSON);
                                Console.WriteLine(getResponseJSON);
                                foreach (var instances in instanceJson)
                                {
                                    Console.WriteLine(instances.Key);
                                    if (!instances.Key.Equals("") && (instances.Key == request.InstanceId))
                                    {
                                        subscribeRequest           = new SubscribeEventRequest();
                                        subscribeRequest.EventId   = result.Value["EventId"].ToString();
                                        subscribeRequest.EventName = result.Value["EventName"].ToString();
                                        eventList.Add(subscribeRequest);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                if (eventList.Count > 0)
                {
                    var json = new JavaScriptSerializer().Serialize(eventList);
                    response = json.ToString();
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(response);
        }
        public string DeleteFromTopic(Globals.eventdetails eventdetails, SubscribeEventRequest subscribeEvent = null, SubscribeVenueRequest subscribeVenue = null)
        {
            string response   = string.Empty;
            string EventId    = string.Empty;
            string InstanceId = string.Empty;

            try
            {
                if (eventdetails == Globals.eventdetails.FromEvent)
                {
                    EventId    = subscribeEvent.EventId;
                    InstanceId = subscribeEvent.InstanceId;
                }
                else if (eventdetails == Globals.eventdetails.FromVenue)
                {
                    EventId    = subscribeVenue.VenueId;
                    InstanceId = subscribeVenue.InstanceId;
                }

                WebRequest tRequest = WebRequest.Create(URLConstants.FirebaseUnSubscribeTopic);
                tRequest.Method      = "post";
                tRequest.ContentType = "application/json";
                var data = new
                {
                    to = "/topics/" + EventId,
                    registration_tokens = new string[] { InstanceId }
                };

                var    json      = JsonConvert.SerializeObject(data);
                Byte[] byteArray = Encoding.UTF8.GetBytes(json);
                tRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
                tRequest.ContentLength = byteArray.Length;

                using (Stream dataStream = tRequest.GetRequestStream())
                {
                    dataStream.Write(byteArray, 0, byteArray.Length);
                    using (WebResponse tResponse = tRequest.GetResponse())
                    {
                        using (Stream dataStreamResponse = tResponse.GetResponseStream())
                        {
                            using (StreamReader tReader = new StreamReader(dataStreamResponse))
                            {
                                String sResponseFromServer = tReader.ReadToEnd();
                                string str = sResponseFromServer;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }
Ejemplo n.º 11
0
        public void SubscribeVehicle(System.Action <ClientVehicleDto, Enums.ModificationType> callBack)
        {
            var subscription = new ObjectModificationSubscription
            {
                ObjectType = "Vehicle"
            };

            _eventSubscriptionWrapper.ObjectModificationSubscription = subscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest
            {
                ClientId = _connectionService.GetClientId(),

                Subscription = _eventSubscriptionWrapper
            };

            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                logger.Error(responce.Exception);
                throw new InvalidOperationException("Failed to subscribe on vehicle modifications. Try again or see log for more details.");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, getObjectNotificationHandler <Vehicle>(
                                                             (token, vehicleId, vehicle) =>
            {
                if (token == Sdk.Protocol.Encoding.ModificationType.MT_UPDATE || token == Sdk.Protocol.Encoding.ModificationType.MT_CREATE)
                {
                    var newCvd = new ClientVehicleDto()
                    {
                        VehicleId = vehicle.Id,
                        Name      = vehicle.Name
                    };
                    messageReceived(callBack, newCvd, Enums.ModificationType.UPDATED);
                }
                else
                {
                    var newCvd = new ClientVehicleDto()
                    {
                        VehicleId = vehicleId,
                        Name      = string.Empty
                    };
                    messageReceived(callBack, newCvd, Enums.ModificationType.DELETED);
                }
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
            tokens.Add(st);
        }
Ejemplo n.º 12
0
        public void SubscribeVehicle(System.Action <ClientVehicleDTO, ModificationTypeDTO> callBack)
        {
            var subscription = new ObjectModificationSubscription();

            subscription.ObjectType = "Vehicle";

            _eventSubscriptionWrapper.ObjectModificationSubscription = subscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connectionService.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                logger.Error(responce.Exception);
                throw new Exception("Failed to subscribe on vehicle modifications. Try again or see log for more details.");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Vehicle>(
                                                             (token, vehicleId, vehicle) =>
            {
                if (token == ModificationType.MT_UPDATE || token == ModificationType.MT_CREATE)
                {
                    var newCvd = new ClientVehicleDTO()
                    {
                        VehicleId  = vehicle.Id,
                        Name       = vehicle.Name,
                        TailNumber = vehicle.SerialNumber
                    };
                    _messageReceived(callBack, newCvd, ModificationTypeDTO.UPDATED);
                }
                else
                {
                    var newCvd = new ClientVehicleDTO()
                    {
                        VehicleId  = vehicleId,
                        Name       = string.Empty,
                        TailNumber = string.Empty
                    };
                    _messageReceived(callBack, newCvd, ModificationTypeDTO.DELETED);
                }
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
            tokens.Add(st);
        }
        public HttpResponseMessage UnsubscribeEvent(SubscribeEventRequest request)
        {
            bool response = false;

            try
            {
                EventDetails eventDetails = new EventDetails();
                response = eventDetails.UnsubscribeEvent(request);
                return(Request.CreateResponse(HttpStatusCode.OK, response));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, false));
            }
        }
        public string AddtoTopic(Globals.eventdetails eventdetails, SubscribeEventRequest subscribeEvent = null, SubscribeVenueRequest subscribeVenue = null)
        {
            string response   = string.Empty;
            string EventId    = string.Empty;
            string InstanceId = string.Empty;

            try
            {
                if (eventdetails == Globals.eventdetails.FromEvent)
                {
                    EventId    = subscribeEvent.EventId;
                    InstanceId = subscribeEvent.InstanceId;
                }
                else if (eventdetails == Globals.eventdetails.FromVenue)
                {
                    EventId    = subscribeVenue.VenueId;
                    InstanceId = subscribeVenue.InstanceId;
                }

                WebRequest tRequest = WebRequest.Create(URLConstants.FirebaseSubscribeTopic + "" + InstanceId + "/rel/topics/" + EventId);
                tRequest.Method      = "post";
                tRequest.ContentType = "application/json";
                tRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
                tRequest.ContentLength = 0;

                using (WebResponse tResponse = tRequest.GetResponse())
                {
                    using (Stream dataStreamResponse = tResponse.GetResponseStream())
                    {
                        using (StreamReader tReader = new StreamReader(dataStreamResponse))
                        {
                            String sResponseFromServer = tReader.ReadToEnd();
                            string str = sResponseFromServer;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }
        public bool SubscribeEvent(SubscribeEventRequest request)
        {
            bool response;

            try
            {
                Event eventObj = new Event();
                response = eventObj.SubscribeEvent(request);
                if (response)
                {
                    MakeFireBaseCalls makeFireBaseCalls = new MakeFireBaseCalls();
                    makeFireBaseCalls.AddtoTopic(Globals.eventdetails.FromEvent, request);
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(response);
        }
Ejemplo n.º 16
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName, this.wid);
            ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply(this.wid);

            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 17
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();

            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            // 关注成功送优惠卷信息
            AddCoupon(subscribeEventRequest.FromUserName);
            return(response);
        }
Ejemplo n.º 18
0
        public bool UnsubscribeEvent(SubscribeEventRequest request)
        {
            try
            {
                string           getResponseJSON = "";
                FirebaseResponse getResponse     = firebaseDBEvent.Get("?orderBy=\"EventId\"&equalTo=\"" + request.EventId + "\"");
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        JObject jObj = JObject.Parse(getResponseJSON);
                        foreach (var result in jObj)
                        {
                            Console.WriteLine(result.Key);
                            getResponseJSON = result.Key;

                            if ((string)result.Value["EventId"] == request.EventId)
                            {
                                Console.WriteLine("DELETE Request");
                                FirebaseResponse deleteResponse = firebaseDBEvent
                                                                  .NodePath(getResponseJSON + "/InstanceId/" + request.InstanceId).Delete();

                                Console.WriteLine(deleteResponse.Success);
                                if (deleteResponse.Success)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(false);
        }
Ejemplo n.º 19
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            ReplyInfo        subscribeReply = ReplyHelper.GetSubscribeReply();
            AbstractResponse result;

            if (subscribeReply == null)
            {
                result = null;
            }
            else
            {
                subscribeReply.Keys = "登录";
                AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);
                if (response == null)
                {
                    this.GotoManyCustomerService(subscribeEventRequest);
                }
                response.ToUserName   = subscribeEventRequest.FromUserName;
                response.FromUserName = subscribeEventRequest.ToUserName;
                result = response;
            }
            return(result);
        }
Ejemplo n.º 20
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType     = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest textRequest = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
            {
                textRequest = new TextRequest();
                break;
            }

            case RequestMsgType.Image:
            {
                textRequest = new ImageRequest();
                break;
            }

            case RequestMsgType.Voice:
            {
                textRequest = new VoiceRequest();
                break;
            }

            case RequestMsgType.Video:
            {
                textRequest = new VideoRequest();
                break;
            }

            case RequestMsgType.Location:
            {
                textRequest = new LocationRequest();
                break;
            }

            case RequestMsgType.Link:
            {
                textRequest = new LinkRequest();
                break;
            }

            case RequestMsgType.Event:
            {
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                {
                    textRequest = new SubscribeEventRequest();
                    break;
                }

                case RequestEventType.UnSubscribe:
                {
                    textRequest = new UnSubscribeEventRequest();
                    break;
                }

                case RequestEventType.Scan:
                {
                    textRequest = new ScanEventRequest();
                    break;
                }

                case RequestEventType.Location:
                {
                    textRequest = new LocationEventRequest();
                    break;
                }

                case RequestEventType.Click:
                {
                    textRequest = new ClickEventRequest();
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException();
                }
                }
                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException();
            }
            }
            EntityHelper.FillEntityWithXml <AbstractRequest>(textRequest, doc);
            return(textRequest);

            throw new ArgumentOutOfRangeException();
        }
Ejemplo n.º 21
0
        static void Main(string[] args)
        {
            //Connect
            TcpClient tcpClient = new TcpClient();

            tcpClient.Connect("localhost", 3334);
            MessageSender   messageSender   = new MessageSender(tcpClient.Session);
            MessageReceiver messageReceiver = new MessageReceiver(tcpClient.Session);
            MessageExecutor messageExecutor = new MessageExecutor(messageSender, messageReceiver, new InstantTaskScheduler());

            messageExecutor.Configuration.DefaultTimeout = 10000;
            var notificationListener = new NotificationListener();

            messageReceiver.AddListener(-1, notificationListener);

            //auth
            AuthorizeHciRequest request = new AuthorizeHciRequest();

            request.ClientId = -1;
            request.Locale   = "en-US";
            var future = messageExecutor.Submit <AuthorizeHciResponse>(request);

            future.Wait();
            AuthorizeHciResponse AuthorizeHciResponse = future.Value;
            int clientId = AuthorizeHciResponse.ClientId;

            System.Console.WriteLine("AuthorizeHciResponse precessed");

            //login
            LoginRequest loginRequest = new LoginRequest();

            loginRequest.UserLogin    = "******";
            loginRequest.UserPassword = "******";
            loginRequest.ClientId     = clientId;
            var loginResponcetask = messageExecutor.Submit <LoginResponse>(loginRequest);

            loginResponcetask.Wait();

            //Lock vehicle example
            AcquireLockRequest lockRequest = new AcquireLockRequest
            {
                ClientId   = clientId,
                ObjectType = "Vehicle",
                ObjectId   = 2
            };

            var resultLock = messageExecutor.Submit <AcquireLockResponse>(lockRequest);

            resultLock.Wait();

            // Click&Go example

            var sendCommandRequestGuided = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code      = "guided",
                    Subsystem = Subsystem.S_FLIGHT_CONTROLLER
                }
            };

            sendCommandRequestGuided.Vehicles.Add(new Vehicle {
                Id = 2
            });
            var sendCommandResponseGuided = messageExecutor.Submit <SendCommandResponse>(sendCommandRequestGuided);

            sendCommandResponseGuided.Wait();

            var sendCommandRequest = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code      = "waypoint",
                    Subsystem = Subsystem.S_FLIGHT_CONTROLLER
                }
            };

            sendCommandRequest.Command.Arguments.AddRange(new CommandArgument[] {
                new CommandArgument {
                    Code = "latitude", Value = new Value {
                        DoubleValue = 0.994445232147517
                    }
                },
                new CommandArgument {
                    Code = "longitude", Value = new Value {
                        DoubleValue = 0.4201742565140717
                    }
                },
                new CommandArgument {
                    Code = "altitude_agl", Value = new Value {
                        DoubleValue = 5.0
                    }
                },
                new CommandArgument {
                    Code = "ground_speed", Value = new Value {
                        DoubleValue = 5.0
                    }
                },
                new CommandArgument {
                    Code = "heading", Value = new Value {
                        DoubleValue = 0.017453292519943295
                    }
                }
            });

            sendCommandRequest.Vehicles.Add(new Vehicle {
                Id = 2
            });

            var sendCommandResponse = messageExecutor.Submit <SendCommandResponse>(sendCommandRequest);

            sendCommandResponse.Wait();
            System.Console.WriteLine("Click&Go command sent");


            //Import mission
            var byteArray = File.ReadAllBytes("Demo mission.xml");
            ImportMissionFromXmlRequest importMissionRequest = new ImportMissionFromXmlRequest()
            {
                ClientId   = clientId,
                MissionXml = byteArray
            };
            var importMissionResponse = messageExecutor.Submit <ImportMissionFromXmlResponse>(importMissionRequest);

            importMissionResponse.Wait();
            //mission contains imported mission from Demo mission.xml
            var mission = importMissionResponse.Value.Mission;

            System.Console.WriteLine("Demo mission.xml imported to UCS with name '{0}'", mission.Name);


            //Get all vehicles
            GetObjectListRequest getObjectListRequest = new GetObjectListRequest()
            {
                ClientId            = clientId,
                ObjectType          = "Vehicle",
                RefreshDependencies = true
            };

            getObjectListRequest.RefreshExcludes.Add("PayloadProfile");
            getObjectListRequest.RefreshExcludes.Add("Route");
            var task = messageExecutor.Submit <GetObjectListResponse>(getObjectListRequest);

            task.Wait();

            var list = task.Value;

            foreach (var v in list.Objects)
            {
                System.Console.WriteLine(string.Format("name: {0}; id: {1}; type: {2}",
                                                       v.Vehicle.Name, v.Vehicle.Id, v.Vehicle.Type.ToString()));
            }
            Vehicle vehicle = task.Value.Objects.FirstOrDefault().Vehicle;

            //Get mission from server
            GetObjectRequest getMissionObjectRequest = new GetObjectRequest()
            {
                ClientId            = clientId,
                ObjectType          = "Mission",
                ObjectId            = mission.Id,
                RefreshDependencies = true
            };
            var getMissionObjectResponse = messageExecutor.Submit <GetObjectResponse>(getMissionObjectRequest);

            getMissionObjectResponse.Wait();
            //missionFromUcs contains retrieved mission
            var missionFromUcs = getMissionObjectResponse.Value.Object.Mission;

            System.Console.WriteLine("mission id '{0}' retrieved from UCS with name '{1}'", mission.Id, missionFromUcs.Name);

            //vehicles in mission
            System.Console.WriteLine("Vehicles in mission:");
            foreach (var vehicleMission in missionFromUcs.Vehicles)
            {
                System.Console.WriteLine(vehicleMission.Vehicle.Name);
            }
            missionFromUcs.Vehicles.Clear();

            //Add vehicle to mission
            missionFromUcs.Vehicles.Add(
                new MissionVehicle
            {
                Vehicle = vehicle
            });

            System.Console.WriteLine("Vehicles in mission after add vehicle:");
            foreach (var vehicleMission in missionFromUcs.Vehicles)
            {
                System.Console.WriteLine(vehicleMission.Vehicle.Name);
            }

            //save mission
            CreateOrUpdateObjectRequest createOrUpdateObjectRequestForMission = new CreateOrUpdateObjectRequest()
            {
                ClientId       = clientId,
                Object         = new DomainObjectWrapper().Put(missionFromUcs, "Mission"),
                WithComposites = true,
                ObjectType     = "Mission",
                AcquireLock    = false
            };
            var updateMissionTask = messageExecutor.Submit <CreateOrUpdateObjectResponse>(createOrUpdateObjectRequestForMission);

            updateMissionTask.Wait();

            //Import route
            var byteArrayRoute = File.ReadAllBytes("Demo route for Copter.xml");
            ImportRouteRequest importRouteRequest = new ImportRouteRequest()
            {
                ClientId  = clientId,
                RouteData = byteArrayRoute,
                Filename  = "Demo route for Copter.xml"
            };
            var importRouteResponse = messageExecutor.Submit <ImportRouteResponse>(importRouteRequest);

            importRouteResponse.Wait();
            //importedRoute contains imported route from Demo route for Copter.xml
            var importedRoute = importRouteResponse.Value.Route;

            System.Console.WriteLine("Demo route for Copter.xml imported to UCS with name '{0}'", importedRoute.Name);
            //Add vehicle profile to route
            GetObjectRequest requestVehicle = new GetObjectRequest()
            {
                ClientId            = clientId,
                ObjectType          = "Vehicle",
                ObjectId            = 1, //EMU-COPTER-17
                RefreshDependencies = true
            };
            var responseVehicle = messageExecutor.Submit <GetObjectResponse>(requestVehicle);

            responseVehicle.Wait();
            importedRoute.VehicleProfile = responseVehicle.Value.Object.Vehicle.Profile;
            //Add route to mission
            importedRoute.Mission = missionFromUcs;
            //Save route on server
            CreateOrUpdateObjectRequest routeSaveRequest = new CreateOrUpdateObjectRequest()
            {
                ClientId       = clientId,
                Object         = new DomainObjectWrapper().Put(importedRoute, "Route"),
                WithComposites = true,
                ObjectType     = "Route",
                AcquireLock    = false
            };
            var updateRouteTask = messageExecutor.Submit <CreateOrUpdateObjectResponse>(routeSaveRequest);

            updateRouteTask.Wait();
            System.Console.WriteLine("route '{0}' added to mission '{1}'", updateRouteTask.Value.Object.Route.Name, missionFromUcs.Name);

            //Get route from server
            GetObjectRequest getRouteObjectRequest = new GetObjectRequest()
            {
                ClientId            = clientId,
                ObjectType          = "Route",
                ObjectId            = updateRouteTask.Value.Object.Route.Id,
                RefreshDependencies = true
            };
            var geRouteObjectResponse = messageExecutor.Submit <GetObjectResponse>(getRouteObjectRequest);

            geRouteObjectResponse.Wait();
            //routeFromUcs contains retrieved route
            var routeFromUcs = geRouteObjectResponse.Value.Object.Route;

            System.Console.WriteLine(string.Format("route id '{0}' retrieved from UCS with name '{1}'", updateRouteTask.Value.Object.Route.Id, routeFromUcs.Name));

            //add action to route
            ActionDefinition actionDefenition = new ActionDefinition();

            actionDefenition.HeadingDefinition                 = new HeadingDefinition();
            actionDefenition.HeadingDefinition.Heading         = 1.57079633; // 90 degrees
            actionDefenition.HeadingDefinition.RelativeToNorth = true;
            if (routeFromUcs.Segments.Count > 2)
            {
                routeFromUcs.Segments[1].ActionDefinitions.Add(actionDefenition);
            }
            System.Console.WriteLine(string.Format("action to route '{0}'", routeFromUcs.Name));

            //save route
            CreateOrUpdateObjectRequest createOrUpdateRouteRequest = new CreateOrUpdateObjectRequest()
            {
                ClientId       = clientId,
                Object         = new DomainObjectWrapper().Put(routeFromUcs, "Route"),
                WithComposites = true,
                ObjectType     = "Route",
                AcquireLock    = false
            };
            var createOrUpdateRouteResponseTask = messageExecutor.Submit <CreateOrUpdateObjectResponse>(createOrUpdateRouteRequest);

            createOrUpdateRouteResponseTask.Wait();
            if (createOrUpdateRouteResponseTask.Value != null)
            {
                System.Console.WriteLine(string.Format("'{0}' route updated on UCS", routeFromUcs.Name));
            }
            else
            {
                System.Console.WriteLine(string.Format("fail to update route '{0}' on UCS", routeFromUcs.Name));
            }

            // Payload control
            SendCommandRequest requestPaload = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code              = "direct_payload_control",
                    Subsystem         = Subsystem.S_GIMBAL,
                    Silent            = true,
                    ResultIndifferent = true
                }
            };

            requestPaload.Vehicles.Add(new Vehicle()
            {
                Id = vehicle.Id
            });

            List <CommandArgument> listCommands = new List <CommandArgument>();

            listCommands.Add(new CommandArgument
            {
                Code  = "roll",
                Value = new Value()
                {
                    DoubleValue = 1
                }
            });
            listCommands.Add(new CommandArgument
            {
                Code  = "pitch",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });
            listCommands.Add(new CommandArgument
            {
                Code  = "yaw",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });
            listCommands.Add(new CommandArgument
            {
                Code  = "zoom",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });

            requestPaload.Command.Arguments.AddRange(listCommands);

            var resultPayload = messageExecutor.Submit <SendCommandResponse>(requestPaload);

            resultPayload.Wait();

            //update vehicle object
            CreateOrUpdateObjectRequest createOrUpdateObjectRequest = new CreateOrUpdateObjectRequest()
            {
                ClientId       = clientId,
                Object         = new DomainObjectWrapper().Put(vehicle, "Vehicle"),
                WithComposites = true,
                ObjectType     = "Vehicle",
                AcquireLock    = false
            };
            var createOrUpdateObjectResponseTask = messageExecutor.Submit <CreateOrUpdateObjectResponse>(createOrUpdateObjectRequest);

            createOrUpdateObjectResponseTask.Wait();

            //Vehicle notification subscription
            var eventSubscriptionWrapper = new EventSubscriptionWrapper();

            eventSubscriptionWrapper.ObjectModificationSubscription            = new ObjectModificationSubscription();
            eventSubscriptionWrapper.ObjectModificationSubscription.ObjectId   = vehicle.Id;
            eventSubscriptionWrapper.ObjectModificationSubscription.ObjectType = "Vehicle";
            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId     = clientId;
            requestEvent.Subscription = eventSubscriptionWrapper;
            var responce = messageExecutor.Submit <SubscribeEventResponse>(requestEvent);

            responce.Wait();
            var subscribeEventResponse = responce.Value;
            SubscriptionToken st       = new SubscriptionToken(subscribeEventResponse.SubscriptionId, (
                                                                   (notification) =>
            {
                //Vehicle notification
            }
                                                                   ), eventSubscriptionWrapper);

            notificationListener.AddSubscription(st);

            // Get Telemetry for vehicle
            DateTime            utcTime               = DateTime.Now.ToUniversalTime();
            DateTime            posixEpoch            = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            TimeSpan            span                  = utcTime - posixEpoch;
            var                 beginningMilliseconds = (long)span.TotalMilliseconds;
            GetTelemetryRequest telemetryRequest      = new GetTelemetryRequest
            {
                ClientId = clientId,
                FromTime = beginningMilliseconds,
                Limit    = 10,
                Vehicle  = new Vehicle()
                {
                    Id = 1
                }
            };
            var responseTelemetry = messageExecutor.Submit <GetTelemetryResponse>(telemetryRequest);

            responseTelemetry.Wait();

            //Go to manual mode
            SendCommandRequest manualModeCommand = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code              = "manual",
                    Subsystem         = Subsystem.S_FLIGHT_CONTROLLER,
                    Silent            = false,
                    ResultIndifferent = false
                }
            };

            manualModeCommand.Vehicles.Add(new Vehicle()
            {
                Id = 2
            });
            var manualMode = messageExecutor.Submit <SendCommandResponse>(manualModeCommand);

            manualMode.Wait();

            //Go to joystick mode
            SendCommandRequest joystickModeCommand = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code              = "joystick",
                    Subsystem         = Subsystem.S_FLIGHT_CONTROLLER,
                    Silent            = false,
                    ResultIndifferent = false
                }
            };

            joystickModeCommand.Vehicles.Add(new Vehicle()
            {
                Id = 2
            });
            var joystickMode = messageExecutor.Submit <SendCommandResponse>(joystickModeCommand);

            joystickMode.Wait();

            // Vehicle control in joystick mode
            SendCommandRequest vehicleJoystickControl = new SendCommandRequest
            {
                ClientId = clientId,
                Command  = new UGCS.Sdk.Protocol.Encoding.Command
                {
                    Code              = "direct_vehicle_control",
                    Subsystem         = Subsystem.S_FLIGHT_CONTROLLER,
                    Silent            = true,
                    ResultIndifferent = true
                }
            };

            vehicleJoystickControl.Vehicles.Add(new Vehicle()
            {
                Id = 2
            });

            //List of current joystick values to send to vehicle.
            List <CommandArgument> listJoystickCommands = new List <CommandArgument>();

            listJoystickCommands.Add(new CommandArgument
            {
                Code  = "roll",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });
            listJoystickCommands.Add(new CommandArgument
            {
                Code  = "pitch",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });
            listJoystickCommands.Add(new CommandArgument
            {
                Code  = "yaw",
                Value = new Value()
                {
                    DoubleValue = 0
                }
            });
            listJoystickCommands.Add(new CommandArgument
            {
                Code  = "throttle",
                Value = new Value()
                {
                    DoubleValue = 1
                }
            });

            vehicleJoystickControl.Command.Arguments.AddRange(listJoystickCommands);

            for (int i = 1; i < 11; i++)
            {
                var sendJoystickCommandResponse = messageExecutor.Submit <SendCommandResponse>(vehicleJoystickControl);
                resultPayload.Wait();
                System.Console.WriteLine("Joystick command to go UP {0}", i);
                Thread.Sleep(1000);
            }

            //TelemetrySubscription
            var telemetrySubscriptionWrapper = new EventSubscriptionWrapper();

            telemetrySubscriptionWrapper.TelemetrySubscription = new TelemetrySubscription();
            SubscribeEventRequest requestTelemetryEvent = new SubscribeEventRequest();

            requestTelemetryEvent.ClientId     = clientId;
            requestTelemetryEvent.Subscription = telemetrySubscriptionWrapper;
            var responceTelemetry = messageExecutor.Submit <SubscribeEventResponse>(requestTelemetryEvent);

            responceTelemetry.Wait();
            var subscribeEventResponseTelemetry = responceTelemetry.Value;
            SubscriptionToken stTelemetry       = new SubscriptionToken(subscribeEventResponseTelemetry.SubscriptionId, (
                                                                            (notification) =>
            {
                foreach (Telemetry t in notification.Event.TelemetryEvent.Telemetry)
                {
                    System.Console.WriteLine("Vehicle id: {0} Code: {1} Semantic {2} Subsystem {3} Value {4}", notification.Event.TelemetryEvent.Vehicle.Id, t.TelemetryField.Code, t.TelemetryField.Semantic, t.TelemetryField.Subsystem, getTelemetryValue(t.Value));
                }
            }
                                                                            ), telemetrySubscriptionWrapper);

            notificationListener.AddSubscription(stTelemetry);

            //Log notification subscription
            var logSubscriptionWrapper = new EventSubscriptionWrapper();

            logSubscriptionWrapper.ObjectModificationSubscription            = new ObjectModificationSubscription();
            logSubscriptionWrapper.ObjectModificationSubscription.ObjectType = "VehicleLogEntry";
            SubscribeEventRequest requestLogEvent = new SubscribeEventRequest();

            requestLogEvent.ClientId     = clientId;
            requestLogEvent.Subscription = logSubscriptionWrapper;
            var responceLog = messageExecutor.Submit <SubscribeEventResponse>(requestLogEvent);
            var subscribeEventResponseLog = responceLog.Value;

            SubscriptionToken stLog = new SubscriptionToken(subscribeEventResponseLog.SubscriptionId, (
                                                                (notification) =>
            {
                var eventType = notification.Event.ObjectModificationEvent.ModificationType;
                var eventLog = notification.Event.ObjectModificationEvent.Object.VehicleLogEntry;
                if (eventType == ModificationType.MT_CREATE)
                {
                    DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    DateTime date = start.AddMilliseconds(eventLog.Time).ToLocalTime();
                    var command = eventLog.CommandArguments != null ? eventLog.CommandArguments.CommandCode : string.Empty;
                    System.Console.WriteLine("LOG: {0} Vehicle id: {1} Command: {2} Message: {3}", date.ToString("HH:mm:ss"), eventLog.Vehicle.Id, command, eventLog.Message);
                }
            }), logSubscriptionWrapper);

            notificationListener.AddSubscription(stLog);

            //Object notification subscription, subscribe for mission changed
            var missionObjectSubscriptionWrapper = new EventSubscriptionWrapper();

            missionObjectSubscriptionWrapper.ObjectModificationSubscription            = new ObjectModificationSubscription();
            missionObjectSubscriptionWrapper.ObjectModificationSubscription.ObjectType = "Mission";
            SubscribeEventRequest requestMissionEvent = new SubscribeEventRequest();

            requestMissionEvent.ClientId     = clientId;
            requestMissionEvent.Subscription = missionObjectSubscriptionWrapper;
            var responceMission = messageExecutor.Submit <SubscribeEventResponse>(requestMissionEvent);
            var subscribeEventResponseMission = responceMission.Value;

            SubscriptionToken stMission = new SubscriptionToken(subscribeEventResponseMission.SubscriptionId, (
                                                                    (notification) =>
            {
                var eventType = notification.Event.ObjectModificationEvent.ModificationType;
                var missionObject = notification.Event.ObjectModificationEvent.Object.Mission;
                if (eventType == ModificationType.MT_UPDATE)
                {
                    System.Console.WriteLine("Mission id: {0} updated", missionObject.Id);
                }
            }), missionObjectSubscriptionWrapper);

            notificationListener.AddSubscription(stMission);


            System.Console.ReadKey();

            tcpClient.Close();
            messageSender.Cancel();
            messageReceiver.Cancel();
            messageExecutor.Close();
            notificationListener.Dispose();
        }
Ejemplo n.º 22
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            string text = "";

            MemberProcessor.UpdateUserFollowStateByOpenId(subscribeEventRequest.FromUserName, 1);
            if (subscribeEventRequest.EventKey != null)
            {
                text = subscribeEventRequest.EventKey;
            }
            if (text.Contains("qrscene_"))
            {
                text = text.Replace("qrscene_", "").Trim();
                if (text == "1")
                {
                    if (WeiXinHelper.BindAdminOpenId.Count > 10)
                    {
                        WeiXinHelper.BindAdminOpenId.Clear();
                    }
                    if (WeiXinHelper.BindAdminOpenId.ContainsKey(subscribeEventRequest.Ticket))
                    {
                        WeiXinHelper.BindAdminOpenId[subscribeEventRequest.Ticket] = subscribeEventRequest.FromUserName;
                    }
                    else
                    {
                        WeiXinHelper.BindAdminOpenId.Add(subscribeEventRequest.Ticket, subscribeEventRequest.FromUserName);
                    }
                    return(new TextResponse
                    {
                        CreateTime = System.DateTime.Now,
                        Content = "您正在扫描尝试绑定管理员身份,身份已识别",
                        ToUserName = subscribeEventRequest.FromUserName,
                        FromUserName = subscribeEventRequest.ToUserName
                    });
                }
                ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(subscribeEventRequest.Ticket);
                bool      flag = MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName);
                int       num  = scanInfosByTicket.BindUserId;
                if (num < 0)
                {
                    num = 0;
                }
                if (!flag && scanInfosByTicket != null)
                {
                    this.CreatMember(subscribeEventRequest.FromUserName, num, "");
                    ScanHelp.updateScanInfosLastActiveTime(System.DateTime.Now, scanInfosByTicket.Sceneid);
                }
            }
            else
            {
                bool flag2 = MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName);
                Globals.Debuglog("关注公众号1", "_DebuglogConcern.txt");
                int num2 = 0;
                if (num2 < 0)
                {
                    num2 = 0;
                }
                if (!flag2)
                {
                    Globals.Debuglog("关注公众号生成用户1", "_DebuglogConcern.txt");
                    this.CreatMember(subscribeEventRequest.FromUserName, num2, "");
                }
            }
            WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName);
            string text2 = "";

            System.Data.DataSet dataSet = new System.Data.DataSet();
            string text3 = System.Web.HttpContext.Current.Server.MapPath("/config/WifiConfig.xml");

            if (System.IO.File.Exists(text3))
            {
                dataSet.ReadXml(text3);
                if (dataSet != null && dataSet.Tables.Count > 0)
                {
                    foreach (System.Data.DataRow dataRow in dataSet.Tables[0].Rows)
                    {
                        if (dataRow["id"].ToString() == text)
                        {
                            text2 = string.Concat(new string[]
                            {
                                dataRow["WifiDescribe"].ToString(),
                                "\r\nWIFI帐号:",
                                dataRow["WifiName"].ToString(),
                                "\r\n WIFI密码:",
                                dataRow["WifiPwd"].ToString()
                            });
                        }
                    }
                }
            }
            if (text2 != "")
            {
                return(new TextResponse
                {
                    CreateTime = System.DateTime.Now,
                    Content = text2,
                    ToUserName = subscribeEventRequest.FromUserName,
                    FromUserName = subscribeEventRequest.ToUserName
                });
            }
            Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();
            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 23
0
        //关注事件
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            Utils.LogWriter.SaveLog("产生关注事件:" + subscribeEventRequest.EventKey);
            string event_key = subscribeEventRequest.EventKey;

            if (!string.IsNullOrEmpty(event_key) && event_key.IndexOf("qrscene_") != -1)
            {
                //关联上级

                /*
                 * 打开分享图片
                 * 获取用户信息
                 *
                 * */

                string open_id = subscribeEventRequest.FromUserName;
                Utils.LogWriter.SaveLog("产生关注事件step1:" + open_id);
                int ReferralUserId = int.Parse(subscribeEventRequest.EventKey.Replace("qrscene_", ""));
                Utils.LogWriter.SaveLog("产生关注事件step2:" + ReferralUserId);

                //判断是否会员
                if (MemberProcessor.IsExitOpenId(open_id))
                {
                    Utils.LogWriter.SaveLog("产生关注事件step3:已存在会员信息");
                    Hidistro.Entities.Members.MemberInfo m = MemberProcessor.GetMembers(open_id);
                    if (m.ReferralUserId == 0 && m.OpenId != open_id)
                    {
                        m.ReferralUserId = ReferralUserId;
                        MemberProcessor.UpdateMember(m);
                        //Utils.LogWriter.SaveLog("扫码填补上级ID:" + ReferralUserId);
                        return(null);
                    }
                }
                else
                {
                    Utils.LogWriter.SaveLog("产生关注事件step3:不存在会员信息");
                    //关联上级并增加客户资料
                    SiteSettings masterSettings = SettingsManager.GetMasterSettings(true);

                    JObject wx_user_info = TokenApi.GetUserInfo(masterSettings.WeixinAppId, masterSettings.WeixinAppSecret, open_id);
                    Utils.LogWriter.SaveLog("产生关注事件step4:" + wx_user_info["nickname"].ToString());

                    string generateId = Globals.GetGenerateId();
                    Hidistro.Entities.Members.MemberInfo member = new Hidistro.Entities.Members.MemberInfo
                    {
                        GradeId        = MemberProcessor.GetDefaultMemberGrade(),
                        UserName       = Globals.UrlDecode(wx_user_info["nickname"].ToString()),
                        OpenId         = open_id,
                        CreateDate     = DateTime.Now,
                        SessionId      = generateId,
                        SessionEndTime = DateTime.Now.AddYears(10),
                        ReferralUserId = ReferralUserId
                    };

                    Utils.LogWriter.SaveLog("创建客户资料");
                    MemberProcessor.CreateMember(member);

                    //获取上级
                    Hidistro.Entities.Members.MemberInfo parentInfo = MemberProcessor.GetMember(ReferralUserId);

                    //获取第多少个会员
                    int count = MemberProcessor.GetMemberCount();

                    TextResponse r = new TextResponse
                    {
                        CreateTime = DateTime.Now,
                        Content    = "恭喜您!您已通过【" + parentInfo.UserName + "】的推荐成为本站会员,您是本站第" + (10000 + count)
                                     + "个会员,点击右下方【创业良机】~【组建团队】进入财富倍增快通道。",
                        ToUserName   = subscribeEventRequest.FromUserName,
                        FromUserName = subscribeEventRequest.ToUserName
                    };
                    return(r);
                }
            }

            ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();

            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 24
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            string eventKey = "";

            if (subscribeEventRequest.EventKey != null)
            {
                eventKey = subscribeEventRequest.EventKey;
            }
            if (eventKey.Contains("qrscene_"))
            {
                eventKey = eventKey.Replace("qrscene_", "").Trim();
                if (eventKey == "1")
                {
                    if (WeiXinHelper.BindAdminOpenId.Count > 10)
                    {
                        WeiXinHelper.BindAdminOpenId.Clear();
                    }
                    if (WeiXinHelper.BindAdminOpenId.ContainsKey(subscribeEventRequest.Ticket))
                    {
                        WeiXinHelper.BindAdminOpenId[subscribeEventRequest.Ticket] = subscribeEventRequest.FromUserName;
                    }
                    else
                    {
                        WeiXinHelper.BindAdminOpenId.Add(subscribeEventRequest.Ticket, subscribeEventRequest.FromUserName);
                    }
                    return(new TextResponse {
                        CreateTime = DateTime.Now, Content = "您正在扫描尝试绑定管理员身份,身份已识别", ToUserName = subscribeEventRequest.FromUserName, FromUserName = subscribeEventRequest.ToUserName
                    });
                }
                ScanInfos scanInfosByTicket = ScanHelp.GetScanInfosByTicket(subscribeEventRequest.Ticket);
                bool      flag       = MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName);
                int       bindUserId = scanInfosByTicket.BindUserId;
                if (bindUserId < 0)
                {
                    bindUserId = 0;
                }
                if (!flag && (scanInfosByTicket != null))
                {
                    this.CreatMember(subscribeEventRequest.FromUserName, bindUserId, "");
                    ScanHelp.updateScanInfosLastActiveTime(DateTime.Now, scanInfosByTicket.Sceneid);
                }
            }
            else
            {
                bool flag2 = MemberProcessor.IsExitOpenId(subscribeEventRequest.FromUserName);
                Globals.Debuglog("关注公众号1", "_DebuglogConcern.txt");
                int referralUserId = 0;
                if (referralUserId < 0)
                {
                    referralUserId = 0;
                }
                if (!flag2)
                {
                    Globals.Debuglog("关注公众号生成用户1", "_DebuglogConcern.txt");
                    this.CreatMember(subscribeEventRequest.FromUserName, referralUserId, "");
                }
            }
            WeiXinHelper.UpdateRencentOpenID(subscribeEventRequest.FromUserName);
            string  str2 = "";
            DataSet set  = new DataSet();
            string  path = HttpContext.Current.Server.MapPath("/config/WifiConfig.xml");

            if (File.Exists(path))
            {
                set.ReadXml(path);
                if ((set != null) && (set.Tables.Count > 0))
                {
                    foreach (DataRow row in set.Tables[0].Rows)
                    {
                        if (row["id"].ToString() == eventKey)
                        {
                            str2 = row["WifiDescribe"].ToString() + "\r\nWIFI帐号:" + row["WifiName"].ToString() + "\r\n WIFI密码:" + row["WifiPwd"].ToString();
                        }
                    }
                }
            }
            if (str2 != "")
            {
                return(new TextResponse {
                    CreateTime = DateTime.Now, Content = str2, ToUserName = subscribeEventRequest.FromUserName, FromUserName = subscribeEventRequest.ToUserName
                });
            }
            Hidistro.Entities.VShop.ReplyInfo subscribeReply = ReplyHelper.GetSubscribeReply();
            if (subscribeReply == null)
            {
                return(null);
            }
            subscribeReply.Keys = "登录";
            AbstractResponse response = this.GetResponse(subscribeReply, subscribeEventRequest.FromUserName);

            if (response == null)
            {
                this.GotoManyCustomerService(subscribeEventRequest);
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 25
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest entity  = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
                entity = new TextRequest();
                break;

            case RequestMsgType.Image:
                entity = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                entity = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                entity = new VideoRequest();
                break;

            case RequestMsgType.Location:
                entity = new LocationRequest();
                break;

            case RequestMsgType.Link:
                entity = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    entity = new SubscribeEventRequest();
                    goto Label_00D7;

                case RequestEventType.UnSubscribe:
                    entity = new UnSubscribeEventRequest();
                    goto Label_00D7;

                case RequestEventType.Scan:
                    entity = new ScanEventRequest();
                    goto Label_00D7;

                case RequestEventType.Location:
                    entity = new LocationEventRequest();
                    goto Label_00D7;

                case RequestEventType.Click:
                    entity = new ClickEventRequest();
                    goto Label_00D7;

                case RequestEventType.MASSSENDJOBFINISH:
                    entity = new MassendJobFinishEventRequest();
                    goto Label_00D7;
                }
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
Label_00D7:
            EntityHelper.FillEntityWithXml <AbstractRequest>(entity, doc);
            Regex regex = new Regex(@"<MsgID>(?<url>\d+)</MsgID>");

            if (entity.MsgId == 0L)
            {
                Match match = Regex.Match(doc.Root.ToString(), @"<MsgID>(?<msgid>\d+)</MsgID>", RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    entity.MsgId      = long.Parse(match.Groups["msgid"].Value);
                    entity.CreateTime = DateTime.Now;
                }
            }
            return(entity);
        }
Ejemplo n.º 26
0
        public override AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
        {
            string fromUserName = subscribeEventRequest.FromUserName;

            try
            {
                MemberProcessor.UpdateWXUserIsSubscribeStatus(fromUserName, true);
            }
            catch (Exception ex)
            {
                IDictionary <string, string> dictionary = new Dictionary <string, string>();
                dictionary.Add("openId", fromUserName);
                Globals.WriteExceptionLog(ex, dictionary, "UpdateWXUserIsSubscribeStatus");
            }
            ReplyInfo replyInfo = ReplyHelper.GetSubscribeReply();

            if (replyInfo == null)
            {
                replyInfo = new ReplyInfo();
            }
            replyInfo.Keys = "登录";
            if (WeiXinRedEnvelopeProcessor.CheckRedEnvelopeGetRecordNoAttentionIsExist(subscribeEventRequest.FromUserName))
            {
                replyInfo.Keys = "红包";
            }
            if (subscribeEventRequest != null && !string.IsNullOrEmpty(subscribeEventRequest.EventKey) && subscribeEventRequest.EventKey.Split('_').Length == 2)
            {
                string text = subscribeEventRequest.EventKey.Split('_')[1];
                if (text == "referralregister")
                {
                    replyInfo.Keys = "分销注册";
                }
                else if (text.Contains("referraluserid"))
                {
                    if (text.Split(':').Length == 2)
                    {
                        int referralUserId = text.Split(':')[1].ToInt(0);
                        MemberWXReferralInfo wXReferral = VShopHelper.GetWXReferral(subscribeEventRequest.FromUserName);
                        if (wXReferral != null && wXReferral.Id > 0)
                        {
                            VShopHelper.UpdateWXReferral(subscribeEventRequest.FromUserName, referralUserId);
                        }
                        else
                        {
                            VShopHelper.AddWXReferral(subscribeEventRequest.FromUserName, referralUserId);
                        }
                    }
                }
                else if (text.Contains("shoppingguiderid"))
                {
                    if (text.Split(':').Length == 2)
                    {
                        int shoppingGuiderId = text.Split(':')[1].ToInt(0);
                        MemberWXShoppingGuiderInfo memberWXShoppingGuider = MemberHelper.GetMemberWXShoppingGuider(subscribeEventRequest.FromUserName);
                        if (memberWXShoppingGuider != null && memberWXShoppingGuider.Id > 0)
                        {
                            MemberHelper.UpdateWXShoppingGuider(subscribeEventRequest.FromUserName, shoppingGuiderId);
                        }
                        else
                        {
                            MemberHelper.AddWXShoppingGuider(subscribeEventRequest.FromUserName, shoppingGuiderId);
                        }
                    }
                }
                else
                {
                    int num = text.ToInt(0);
                    if (num > 0)
                    {
                        RedEnvelopeSendRecord redEnvelopeSendRecordById = WeiXinRedEnvelopeProcessor.GetRedEnvelopeSendRecordById(num);
                        if (redEnvelopeSendRecordById != null && WeiXinRedEnvelopeProcessor.IsGetInToday(subscribeEventRequest.FromUserName, redEnvelopeSendRecordById.SendCode, true, ""))
                        {
                            replyInfo.Keys = "今日已领红包";
                        }
                    }
                }
            }
            AbstractResponse response = this.GetResponse(replyInfo, subscribeEventRequest.FromUserName, subscribeEventRequest);

            if (response == null)
            {
                return(this.GotoManyCustomerService(subscribeEventRequest));
            }
            response.ToUserName   = subscribeEventRequest.FromUserName;
            response.FromUserName = subscribeEventRequest.ToUserName;
            return(response);
        }
Ejemplo n.º 27
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            AbstractRequest abstractRequest;

            switch (MsgTypeHelper.GetMsgType(doc))
            {
            case RequestMsgType.Text:
                abstractRequest = new TextRequest();
                break;

            case RequestMsgType.Image:
                abstractRequest = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                abstractRequest = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                abstractRequest = new VideoRequest();
                break;

            case RequestMsgType.Location:
                abstractRequest = new LocationRequest();
                break;

            case RequestMsgType.Link:
                abstractRequest = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    abstractRequest = new SubscribeEventRequest();
                    break;

                case RequestEventType.UnSubscribe:
                    abstractRequest = new UnSubscribeEventRequest();
                    break;

                case RequestEventType.Scan:
                    abstractRequest = new ScanEventRequest();
                    break;

                case RequestEventType.Location:
                    abstractRequest = new LocationEventRequest();
                    break;

                case RequestEventType.Click:
                    abstractRequest = new ClickEventRequest();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            EntityHelper.FillEntityWithXml <AbstractRequest>(abstractRequest, doc);
            return(abstractRequest);
        }
Ejemplo n.º 28
0
        public static AbstractRequest GetRequestEntity(XDocument doc)
        {
            RequestMsgType  msgType = MsgTypeHelper.GetMsgType(doc);
            AbstractRequest entity  = null;

            switch (msgType)
            {
            case RequestMsgType.Text:
                entity = new TextRequest();
                break;

            case RequestMsgType.Image:
                entity = new ImageRequest();
                break;

            case RequestMsgType.Voice:
                entity = new VoiceRequest();
                break;

            case RequestMsgType.Video:
                entity = new VideoRequest();
                break;

            case RequestMsgType.Location:
                entity = new LocationRequest();
                break;

            case RequestMsgType.Link:
                entity = new LinkRequest();
                break;

            case RequestMsgType.Event:
                switch (EventTypeHelper.GetEventType(doc))
                {
                case RequestEventType.Subscribe:
                    entity = new SubscribeEventRequest();
                    goto Label_00C5;

                case RequestEventType.UnSubscribe:
                    entity = new UnSubscribeEventRequest();
                    goto Label_00C5;

                case RequestEventType.Scan:
                    entity = new ScanEventRequest();
                    goto Label_00C5;

                case RequestEventType.Location:
                    entity = new LocationEventRequest();
                    goto Label_00C5;

                case RequestEventType.Click:
                    entity = new ClickEventRequest();
                    goto Label_00C5;
                }
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
Label_00C5:
            EntityHelper.FillEntityWithXml <AbstractRequest>(entity, doc);
            return(entity);
        }
Ejemplo n.º 29
0
 public virtual AbstractResponse OnEvent_SubscribeRequest(SubscribeEventRequest subscribeEventRequest)
 {
     return(this.DefaultResponse(subscribeEventRequest));
 }
Ejemplo n.º 30
0
        public bool SubscribeEvent(SubscribeEventRequest request)
        {
            try
            {
                string           getResponseJSON = "";
                bool             isExist         = false;
                int              count           = 0;
                JObject          jObj            = null;
                FirebaseResponse getResponse     = firebaseDBEvent.Get("?orderBy=\"EventId\"&equalTo=\"" + request.EventId + "\"");
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        jObj            = JObject.Parse(getResponseJSON);
                        count           = jObj.Count;
                        foreach (var result in jObj)
                        {
                            Console.WriteLine(result.Key);
                            getResponseJSON = (string)result.Value["EventId"];

                            if (getResponseJSON == request.EventId)
                            {
                                FirebaseResponse patchInstanceId = firebaseDBEvent
                                                                   .NodePath(result.Key + "/InstanceId")
                                                                   .Patch("{\"" + request.InstanceId + "\":\"true\"}");
                                Console.WriteLine(patchInstanceId.Success);
                                if (patchInstanceId.Success)
                                {
                                    isExist = true;
                                    return(true);
                                }
                            }
                        }
                    }
                }

                if (!isExist)
                {
                    jObj        = null;
                    count       = 0;
                    getResponse = firebaseDBEvent.Get();
                    if (getResponse.Success)
                    {
                        if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                        {
                            getResponseJSON = getResponse.JSONContent;
                            jObj            = JObject.Parse(getResponseJSON);
                            count           = jObj.Count;
                        }
                    }
                    Console.WriteLine("Patch Login Request");
                    FirebaseResponse patchRequest = firebaseDBEvent.Patch("{\"E" + (count + 1) + "\":{\"EventId\":\"" + request.EventId + "\",\"EventName\":\"" + request.EventName + "\",\"InstanceId\":{\"" + request.InstanceId + "\":\"true\"}}}");
                    Console.WriteLine(patchRequest.Success);
                    if (patchRequest.Success)
                    {
                        return(true);
                    }
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(false);
        }