Esempio n. 1
0
        /// <summary>
        /// Converts the communication message to a data structure.
        /// </summary>
        /// <param name="message">The communication message.</param>
        /// <returns>The data structure that contains all the information that was stored in the message.</returns>
        public IStoreV1CommunicationData FromMessage(ICommunicationMessage message)
        {
            var disconnectMessage = message as EndpointDisconnectMessage;

            if (disconnectMessage == null)
            {
                return(new UnknownMessageTypeData
                {
                    Id = message.Id,
                    InResponseTo = message.InResponseTo,
                    Sender = message.Sender,
                });
            }

            return(new EndpointDisconnectData
            {
                Id = disconnectMessage.Id,
                InResponseTo = disconnectMessage.InResponseTo,
                Sender = disconnectMessage.Sender,
                DisconnectReason = disconnectMessage.ClosingReason,
            });
        }
Esempio n. 2
0
        /// <summary>
        /// Converts the communication message to a data structure.
        /// </summary>
        /// <param name="message">The communication message.</param>
        /// <returns>The data structure that contains all the information that was stored in the message.</returns>
        public IStoreV1CommunicationData FromMessage(ICommunicationMessage message)
        {
            var failureMessage = message as FailureMessage;

            if (failureMessage == null)
            {
                return(new UnknownMessageTypeData
                {
                    Id = message.Id,
                    InResponseTo = message.InResponseTo,
                    Sender = message.Sender,
                });
            }

            return(new FailureData
            {
                Id = failureMessage.Id,
                InResponseTo = failureMessage.InResponseTo,
                Sender = failureMessage.Sender,
                FailureReason = string.Empty,
            });
        }
        private ICommunicationMessage _GetTabluarVariantInfo(ICommunicationMessage message)
        {
            CommandMsgV2 resp = new CommandMsgV2();

            resp.SeqID          = CommandProcessor.AllocateID();
            resp.TK_CommandType = Constants.TK_CommandType.RESPONSE;
            resp.SetValue(Constants.MSG_PARANAME_RESPONSE_TO, message.SeqID);
            resp.SetValue("ClientID", message.GetValue("ClientID"));
            resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
            resp.SetValue(Constants.MSG_PARANAME_CHARTRESULT, null);

            try
            {
                string cmd     = message.GetValue(Constants.MSG_PARANAME_RAWSQL).ToString();
                string catalog = message.GetValue(Constants.MSG_PARANAME_TABLECATALOG).ToString().ToUpper();
                string connstr = "";
                if (catalog == "SYS_DB")
                {
                    connstr = AlarmManager.instance().ConnString;
                }
                else if (catalog == "USER_DB")
                {
                    connstr = UserManager.instance().ConnString;
                }

                DataSet ds = new DataSet();
                SqlHelper.FillDataset(connstr, CommandType.Text, cmd, ds, new string[] { "result" });
                ds.AcceptChanges();
                resp.SetValue(Constants.MSG_PARANAME_CHARTRESULT, ds.Tables["result"]);
            }
            catch (Exception ex)
            {
                resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                resp.SetValue(Constants.MSG_PARANAME_REASON, ex.Message);
            }

            return(resp);
        }
Esempio n. 4
0
        public void ActOnArrivalWithLastChanceHandler()
        {
            var localEndpoint = new EndpointId("id");

            ICommunicationMessage storedMsg  = null;
            SendMessage           sendAction =
                (e, m, r) =>
            {
                storedMsg = m;
            };

            var store = new Mock <IStoreInformationAboutEndpoints>();
            {
                store.Setup(s => s.CanCommunicateWithEndpoint(It.IsAny <EndpointId>()))
                .Returns(false);
            }

            var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null);

            var processAction = new UnknownMessageTypeProcessAction(localEndpoint, sendAction, systemDiagnostics);
            var handler       = new MessageHandler(store.Object, systemDiagnostics);

            handler.ActOnArrival(new MessageKindFilter(processAction.MessageTypeToProcess), processAction);

            var endpoint = new EndpointId("sendingEndpoint");
            var msg      = new EndpointConnectMessage(
                endpoint,
                new DiscoveryInformation(new Uri("http://localhost/discovery/invalid")),
                new ProtocolInformation(
                    new Version(),
                    new Uri(@"net.pipe://localhost/test"),
                    new Uri(@"net.pipe://localhost/test/data")),
                new ProtocolDescription(new List <CommunicationSubject>()));

            handler.ProcessMessage(msg);

            Assert.IsInstanceOf <FailureMessage>(storedMsg);
        }
Esempio n. 5
0
        public void Invoke()
        {
            var endpoint = new EndpointId("id");

            EndpointId            storedEndpoint = null;
            ICommunicationMessage storedMsg      = null;
            SendMessage           sendAction     =
                (e, m, r) =>
            {
                storedEndpoint = e;
                storedMsg      = m;
            };

            var systemDiagnostics = new SystemDiagnostics((p, s) => { }, null);

            var action = new UnknownMessageTypeProcessAction(endpoint, sendAction, systemDiagnostics);

            var otherEndpoint = new EndpointId("otherId");

            action.Invoke(new SuccessMessage(otherEndpoint, new MessageId()));

            Assert.AreSame(otherEndpoint, storedEndpoint);
            Assert.IsInstanceOf <FailureMessage>(storedMsg);
        }
Esempio n. 6
0
        public void ConvertFromMsg(ICommunicationMessage msg)
        {
            foreach (string key in msg.GetKeys())
            {
                object val = msg.GetValue(key);
                switch (key)
                {
                case "COMMAND":
                    if (val.ToString() != Constants.MSG_TYPE_ALARM_REPORT && val.ToString() != Constants.MSG_TYPE_ALARM_ORDER_CHANGE)
                    {
                        return;
                    }
                    break;

                case "接收时间":
                    ReceiveTime = val.ToString();
                    break;

                case "集中告警流水号":
                    TKSn = val.ToString();
                    break;

                case "厂商告警流水号":
                    ManuSn = val.ToString();
                    break;

                case "告警城市":
                    City = val.ToString();
                    break;

                case "设备厂商":
                    Manufacturer = val.ToString();
                    break;

                case "业务类型":
                    BusinessType = val.ToString();
                    break;

                case "OMCName":
                    OMCName = val.ToString();
                    break;

                case "网元名称":
                    NeName = val.ToString();
                    break;

                case "网元类型":
                    NeType = val.ToString();
                    break;

                case "对象名称":
                    ObjName = val.ToString();
                    break;

                case "对象类型":
                    ObjType = val.ToString();
                    break;

                case "告警名称":
                    AlarmName = val.ToString();
                    break;

                case "重定义告警名称":
                    Redefinition = val.ToString();
                    break;

                //						case "告警种类":
                //							Category = val.ToString();
                //							break;
                case "告警级别":
                    Severity = val.ToString();
                    break;

                case "告警发生时间":
                    OccurTime = val.ToString();
                    break;

                case "告警确认时间LV1":
                    AckTimeLV1 = val.ToString();
                    break;

                case "再次确认时间LV1":
                    AckAgainTimeLV1 = val.ToString();
                    break;

                case "告警确认时间LV2":
                    AckTimeLV2 = val.ToString();
                    break;

                case "再次确认时间LV2":
                    AckAgainTimeLV2 = val.ToString();
                    break;

                case "告警恢复时间":
                    ClearTime = val.ToString();
                    break;

                case "告警定位信息":
                    Location = val.ToString();
                    break;

                case "操作员信息LV11":
                    OperatorLV11 = val.ToString();
                    break;

                case "操作员信息LV12":
                    OperatorLV12 = val.ToString();
                    break;

                case "操作员信息LV21":
                    OperatorLV21 = val.ToString();
                    break;

                case "操作员信息LV22":
                    OperatorLV22 = val.ToString();
                    break;

                case "工程上报信息":
                    ProjectInfo = val.ToString();
                    break;

                //add
                case "工程超时":
                    ProjectBool = val.ToString();
                    break;

                case "派单人LV1":
                    OrderOperatorLV1 = val.ToString();
                    break;

                case "派单号LV1":
                    OrderIDLV1 = val.ToString();
                    break;

                case "派单时间LV1":
                    OrderTimeLV1 = val.ToString();
                    break;

                case "派单人LV2":
                    OrderOperatorLV2 = val.ToString();
                    break;

                case "派单号LV2":
                    OrderIDLV2 = val.ToString();
                    break;

                case "派单时间LV2":
                    OrderTimeLV2 = val.ToString();
                    break;

                default:
                    break;
                }
            }
        }
Esempio n. 7
0
        public void Invoke(ICommunicationMessage message)
        {
            var msg = message as CommandInvokedMessage;

            if (msg == null)
            {
                Debug.Assert(false, "The message is of the incorrect type.");
                return;
            }

            var invocation = msg.Invocation;

            m_Diagnostics.Log(
                LevelToLog.Trace,
                CommunicationConstants.DefaultLogTextPrefix,
                string.Format(
                    CultureInfo.InvariantCulture,
                    "Received request to execute command: {0}",
                    invocation.Command));

            try
            {
                var id = invocation.Command;
                CommandDefinition commandSet;
                try
                {
                    commandSet = m_Commands.CommandToInvoke(id);
                }
                catch (UnknownCommandException)
                {
                    m_Diagnostics.Log(
                        LevelToLog.Trace,
                        CommunicationConstants.DefaultLogTextPrefix,
                        string.Format(
                            CultureInfo.InvariantCulture,
                            "Command invokation was requested for {0} from {1} but this command was not registered.",
                            id,
                            msg.Sender));

                    var failureResult = new FailureMessage(m_Current, msg.Id);
                    m_SendMessage(msg.Sender, failureResult, CommunicationConstants.DefaultMaximuNumberOfRetriesForMessageSending);
                    return;
                }

                var result = commandSet.Invoke(message.Sender, message.Id, invocation.Parameters);

                ICommunicationMessage responseMessage;
                if (commandSet.HasReturnValue)
                {
                    responseMessage = new CommandInvokedResponseMessage(m_Current, msg.Id, result);
                }
                else
                {
                    responseMessage = new SuccessMessage(m_Current, msg.Id);
                }

                m_SendMessage(msg.Sender, responseMessage, CommunicationConstants.DefaultMaximuNumberOfRetriesForMessageSending);
            }
            catch (Exception e)
            {
                HandleCommandExecutionFailure(msg, e);
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Sends the given message.
        /// </summary>
        /// <param name="message">The message to be send.</param>
        /// <param name="maximumNumberOfRetries">The maximum number of times the endpoint will try to send the message if delivery fails.</param>
        public void Send(ICommunicationMessage message, int maximumNumberOfRetries)
        {
            var v1Message = TranslateMessage(message);

            SendMessage(v1Message, maximumNumberOfRetries);
        }
Esempio n. 9
0
        protected async void Save <T>(ICommunicationMessage e, T vehicle) where T : Vehicle
        {
            using (var context = new StorageContext())
                using (var transaction = context.Database.BeginTransaction())
                {
                    var dbVeh = context.Vehicles
                                .Include(v => v.Extras)
                                .Include(v => v.Wheels)
                                .Include(v => v.Doors)
                                .Include(v => v.Windows)
                                .Include(v => v.Seats)
                                //.Include(v => v.Mods)
                                .FirstOrDefault(c => c.Id == vehicle.Id);

                    if (dbVeh == null ||
                        dbVeh.TrackingUserId != Guid.Empty && e.User.Id != dbVeh.TrackingUserId)
                    {
                        return;
                    }

                    vehicle.Created = dbVeh.Created;

                    context.Entry(dbVeh).CurrentValues.SetValues(vehicle);

                    // Wheels
                    foreach (var dbVehWheel in dbVeh.Wheels.ToList())
                    {
                        if (vehicle.Wheels.All(m => m.Position != dbVehWheel.Position))
                        {
                            context.VehicleWheels.Remove(dbVehWheel);
                        }
                    }

                    foreach (var vehWheel in vehicle.Wheels)
                    {
                        var dbVehWheel = dbVeh.Wheels.SingleOrDefault(s => s.Position == vehWheel.Position);
                        if (dbVehWheel != null)
                        {
                            vehWheel.Id        = dbVehWheel.Id;
                            vehWheel.VehicleId = vehicle.Id;
                            context.Entry(dbVehWheel).CurrentValues.SetValues(vehWheel);
                            // We have to manually set enums for some reason...
                            context.Entry(dbVehWheel).Property("Position").CurrentValue = vehWheel.Position;
                        }
                        else
                        {
                            dbVeh.Wheels.Add(vehWheel);
                        }
                    }

                    // Doors
                    foreach (var dbVehDoor in dbVeh.Doors.ToList())
                    {
                        if (vehicle.Doors.All(m => m.Index != dbVehDoor.Index))
                        {
                            context.VehicleDoors.Remove(dbVehDoor);
                        }
                    }

                    foreach (var vehDoor in vehicle.Doors)
                    {
                        var dbVehDoor = dbVeh.Doors.SingleOrDefault(s => s.Index == vehDoor.Index);
                        if (dbVehDoor != null)
                        {
                            vehDoor.Id        = dbVehDoor.Id;
                            vehDoor.VehicleId = vehicle.Id;
                            context.Entry(dbVehDoor).CurrentValues.SetValues(vehDoor);
                        }
                        else
                        {
                            dbVeh.Doors.Add(vehDoor);
                        }
                    }

                    // Extras
                    foreach (var dbVehExtra in dbVeh.Extras.ToList())
                    {
                        if (vehicle.Extras.All(m => m.Index != dbVehExtra.Index))
                        {
                            context.VehicleExtras.Remove(dbVehExtra);
                        }
                    }

                    foreach (var vehExtra in vehicle.Extras)
                    {
                        var dbVehExtra = dbVeh.Extras.SingleOrDefault(s => s.Index == vehExtra.Index);
                        if (dbVehExtra != null)
                        {
                            vehExtra.Id        = dbVehExtra.Id;
                            vehExtra.VehicleId = vehicle.Id;
                            context.Entry(dbVehExtra).CurrentValues.SetValues(vehExtra);
                        }
                        else
                        {
                            dbVeh.Extras.Add(vehExtra);
                        }
                    }

                    // Windows
                    foreach (var dbVehWindow in dbVeh.Windows.ToList())
                    {
                        if (vehicle.Windows.All(m => m.Index != dbVehWindow.Index))
                        {
                            context.VehicleWindows.Remove(dbVehWindow);
                        }
                    }

                    foreach (var vehWindow in vehicle.Windows)
                    {
                        var dbVehWindow = dbVeh.Windows.SingleOrDefault(s => s.Index == vehWindow.Index);
                        if (dbVehWindow != null)
                        {
                            vehWindow.Id        = dbVehWindow.Id;
                            vehWindow.VehicleId = vehicle.Id;
                            context.Entry(dbVehWindow).CurrentValues.SetValues(vehWindow);
                        }
                        else
                        {
                            dbVeh.Windows.Add(vehWindow);
                        }
                    }

                    // Seats
                    foreach (var dbVehSeat in dbVeh.Seats.ToList())
                    {
                        if (vehicle.Seats.All(m => m.Index != dbVehSeat.Index))
                        {
                            context.VehicleSeats.Remove(dbVehSeat);
                        }
                    }

                    foreach (var vehSeat in vehicle.Seats)
                    {
                        var dbVehSeat = dbVeh.Seats.SingleOrDefault(s => s.Index == vehSeat.Index);
                        if (dbVehSeat != null)
                        {
                            vehSeat.Id        = dbVehSeat.Id;
                            vehSeat.VehicleId = vehicle.Id;
                            context.Entry(dbVehSeat).CurrentValues.SetValues(vehSeat);
                        }
                        else
                        {
                            dbVeh.Seats.Add(vehSeat);
                        }
                    }

                    // TODO: Mods

                    await context.SaveChangesAsync();

                    transaction.Commit();
                }
        }
 public bool DelayedInterpret(ICommunicationMessage cm)
 {
     return(false);
 }
Esempio n. 11
0
        public void handleCommand(ICommunicationMessage message)
        {
            long clientid = 0, immediateid = 0;

            try
            {
                clientid = Convert.ToInt64(message.GetValue("ClientID").ToString());
                lock (m_ClientCommunicators)
                {
                    if (!m_ClientCommunicators.ContainsKey(clientid))
                    {
                        return; // 非来自自身管理的client的响应包, 不处理
                    }
                }
            }
            catch
            {
                return; // 没有clientid的报文不处理
            }

            try
            {
                // 非自身发包的响应以及向客户端的主动发包都发送到客户端
                if (message.Contains(Constants.MSG_PARANAME_IMMEDIATE_ID))
                {
                    immediateid = Convert.ToInt64(message.GetValue(Constants.MSG_PARANAME_IMMEDIATE_ID).ToString());
                }

                if (clientid == Constants.BOARDCAST_CLIENT_ID)
                {
                    lock (m_ClientCommunicators)
                    {
                        foreach (Communicator disp in m_ClientCommunicators.Values)
                        {
                            disp.enqueueMessage(message.clone());
                        }
                    }
                }
                else
                {
                    ICommunicator dispatcher = null;
                    lock (m_ClientCommunicators)
                    {
                        if (!m_ClientCommunicators.ContainsKey(clientid))
                        {
                            return;
                        }

                        dispatcher = m_ClientCommunicators[clientid];
                    }

                    dispatcher.enqueueMessage(message);
                }
            }
            catch (Exception ex)
            {
                SendLog(ex.ToString());
            }
            finally
            {
            }
        }
Esempio n. 12
0
 private void GetAllMarkersEvent(ICommunicationMessage e)
 {
     e.Reply(markerManager.GetAllMarkers());
 }
        CommandMsgV2 _StartAdapter(ICommunicationMessage message)
        {
            try
            {
                CommandMsgV2 resp = new CommandMsgV2();
                resp.TK_CommandType = Constants.TK_CommandType.RESPONSE;
                resp.SeqID          = CommandProcessor.AllocateID();
                resp.SetValue("ClientID", message.GetValue("ClientID"));
                resp.SetValue(Constants.MSG_PARANAME_RESPONSE_TO, message.SeqID);


                long adapterid = Convert.ToInt64(message.GetValue(Constants.MSG_PARANAME_ADAPTER_ID));

                C5.HashDictionary <long, AdapterInfo> ads = new C5.HashDictionary <long, AdapterInfo>();
                AlarmManager.instance().GetAdaptersInfo(ads);
                if (!ads.Contains(adapterid))
                {
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                    resp.SetValue(Constants.MSG_PARANAME_REASON, "采集器不存在.");
                    return(resp);
                }

                try
                {
                    CommandMsgV2 cmd = new CommandMsgV2();
                    cmd.SeqID          = CommandProcessor.AllocateID();
                    cmd.TK_CommandType = Constants.TK_CommandType.ADAPTER_START;
                    cmd.SetValue("ClientID", adapterid);
                    cmd.SetValue(Constants.MSG_PARANAME_ADAPTER_NAME, ads[adapterid].Name);

                    System.Net.IPEndPoint end = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(ads[adapterid].Address), ads[adapterid].ControllerPort);
                    if (end.Port == 0)
                    {
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                        resp.SetValue(Constants.MSG_PARANAME_REASON, "不可远程控制的采集器");
                    }
                    else
                    {
                        ICommClient comm = CommManager.instance().CreateCommClient <CommandMsgV2, TKMessageV2Extractor, TKMessageV2Encoder>("控制器",
                                                                                                                                            end.Address.ToString(), end.Port, 30, false, false);

                        comm.Start();
                        ICommunicationMessage r2 = comm.SendCommand(cmd);
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, r2.GetValue(Constants.MSG_PARANAME_RESULT));
                        comm.Close();
                    }
                }
                catch (Exception ex)
                {
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                    resp.SetValue(Constants.MSG_PARANAME_REASON, ex.Message);
                }

                return(resp);
            }
            catch (Exception ex)
            {
                Logger.Instance().SendLog(ex.ToString());
                return(null);
            }
        }
Esempio n. 14
0
 private void GetCharacterById(ICommunicationMessage e, Guid characterId)
 {
     using (var ctx = new StorageContext()) {
         e.Reply(ctx.Characters.FirstOrDefault(c => c.Id == characterId));
     }
 }
Esempio n. 15
0
        private async void OnPlayerDisconnected(ICommunicationMessage e, IClient client, Session session)
        {
            await DeselectAll(session.UserId);

            API.DropPlayer(client.License, "Disconnect from character selection");
        }
Esempio n. 16
0
 private bool _sendMessage(ICommunicationMessage msg)
 {
     byte[] newbuf = m_Encoder.encodeMessage(msg, m_bCompress);
     return(_sendMessage(newbuf));
 }
Esempio n. 17
0
        private void _worker(object state)
        {
            try
            {
                m_ClearEvent.Reset();

                while (Interlocked.Read(ref m_Run) == 1)
                {
                    m_SignalNewMessage.WaitOne();
                    if (Interlocked.Read(ref m_Run) == 0)
                    {
                        return;
                    }

                    // 一次命令激活发送完队列中所有数据
                    while (Interlocked.Read(ref m_Run) == 1)
                    {
                        List <ICommunicationMessage> tobesent = new List <ICommunicationMessage>();
                        lock (m_Messages)
                        {
                            while (m_Messages.Count > 0)
                            {
                                tobesent.Add(m_Messages.Dequeue());
                            } // endif

                            Thread.Sleep(0);
                        }

                        foreach (ICommunicationMessage msg in tobesent)
                        {
                            msg.SetValue("LAST_SEQ_ID", m_last_seq_id);
                            m_last_seq_id = msg.SeqID;

                            //msg.RemoveKey("ClientID");
                            _sendMessage(msg);
                        }
                        tobesent.Clear();

                        List <ICommunicationMessage> alarms = new List <ICommunicationMessage>();
                        lock (m_DelayedMessages)
                        {
                            if (m_DelayedMessages.Count == 0)
                            {
                                break;
                            }

                            int i = 0;
                            while (m_DelayedMessages.Count > 0 && ++i <= 50)
                            {
                                ICommunicationMessage msg = m_DelayedMessages.Dequeue();

                                msg.SetValue("LAST_SEQ_ID", m_last_seq_id);
                                m_last_seq_id = msg.SeqID;

                                //msg.RemoveKey("ClientID");
                                alarms.Add(msg);
                            }
                        }

                        if (alarms.Count > 0)
                        {
                            _sendMessage(alarms);
                        }

                        Thread.Sleep(0);

                        lock (m_DelayedMessages)
                        {
                            if (m_DelayedMessages.Count == 0)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                m_ClearEvent.Set();

                try
                {
                    SendLog(ex.Message);
                    InvokeConnectionBroken(this, m_ClientInfo.ToString());
                }
                catch { }
            }
            finally
            {
                m_ClearEvent.Set();
            }
        }
Esempio n. 18
0
 private void Transfer(ICommunicationMessage e, int vehicleId, Guid transferToUserId)
 {
     this.Tracked.Remove(this.Tracked.First(v => v.Id == vehicleId));
     this.Comms.Event(VehicleEvents.Transfer).ToServer().Emit(vehicleId, transferToUserId);
 }
 public byte[] encodeMessage(ICommunicationMessage msg, bool compress)
 {
     return(_MakeHeader(((CommandMsgV2)msg).ToNetBuf(), compress));
 }
Esempio n. 20
0
 public ICommunicationMessage SendCommand(long clientid, ICommunicationMessage command)
 {
     return(SendCommand(clientid, command, m_SyncCmdTimeout));
 }
Esempio n. 21
0
 private void GetAllCharactersForUser(ICommunicationMessage e)
 {
     GetAllCharactersForUser(e, e.User.Id);
 }
Esempio n. 22
0
        private CommandMsgV2 UserLogin(ICommunicationMessage message)
        {
            CommandMsgV2 responseMsg = new CommandMsgV2();

            try
            {
                if (message.Contains("ClientID"))
                {
                    if (message.Contains("用户名") && message.Contains("密码"))
                    {
                        string sUserName = message.GetValue("用户名").ToString().Trim();
                        string sPassword = message.GetValue("密码").ToString().Trim();

                        string  sQuery = "select manage,company from Operator where valid=1 and login_name = '" + sUserName + "' and password = '******'";
                        DataSet ds;
                        ds = SqlHelper.ExecuteDataset(m_ConnStr, CommandType.Text, sQuery);

                        if (ds.Tables[0].Rows.Count == 1)
                        {
                            //用户名、密码正确
                            object[] objs     = ds.Tables[0].Rows[0].ItemArray;
                            string   sRight   = objs[0].ToString();
                            string   sCompany = ds.Tables[0].Rows[0]["company"].ToString();

                            //查询用户可管理的业务类型
                            sQuery = "select businesstype from Operator_BusinessType where login_name = '" + sUserName + "'";
                            ds.Tables.Clear();

                            ds = SqlHelper.ExecuteDataset(m_ConnStr, CommandType.Text, sQuery);

                            string sFilter = "";
                            foreach (DataRow dr in ds.Tables[0].Rows)
                            {
                                object[] temps = dr.ItemArray;
                                sFilter += temps[0].ToString().Trim() + ",";
                            }

                            #region 先发命令给CM,通知客户端登陆成功
                            CommandMsgV2 MsgLogOK = new CommandMsgV2();
                            MsgLogOK.TK_CommandType = Constants.TK_CommandType.RESPONSE;
                            MsgLogOK.SeqID          = CommandProcessor.AllocateID();
                            MsgLogOK.SetValue("ClientID", message.GetValue("ClientID"));
                            MsgLogOK.SetValue("RESPONSE_TO", message.SeqID);
                            MsgLogOK.SetValue("RESULT", "OK");
                            MsgLogOK.SetValue("BUSINESSTYPE", sFilter.Trim());
                            MsgLogOK.SetValue("RIGHT", sRight.Trim());
                            MsgLogOK.SetValue("COMPANY", sCompany.Trim());

                            CommandProcessor.instance().DispatchCommand(MsgLogOK);

                            #endregion


                            //发命令给AM,注册客户端
                            responseMsg.SeqID          = message.SeqID;
                            responseMsg.TK_CommandType = Constants.TK_CommandType.REGISTERCLIENT;
                            responseMsg.SetValue("ClientID", message.GetValue("ClientID"));
                            responseMsg.SetValue(Constants.MSG_PARANAME_AUTHORIZED, true);
                            responseMsg.SetValue("SERVERNAME", Constants.ALARM_SERVERNAME);
                            responseMsg.SetValue("Filter", sFilter.Trim());
                            responseMsg.SetValue("RIGHT", sRight.Trim());
                            responseMsg.SetValue("COMPANY", sCompany.Trim());

                            sQuery = "update Operator set lastlogintime = '" + DateTime.Now.ToString() + "' where login_name = '" + sUserName + "'";

                            SqlHelper.ExecuteNonQuery(m_ConnStr, CommandType.Text, sQuery);

                            Logger.Instance().SendLog("UM", "用户:" + sUserName + " 已登录到系统.");
                        }
                        else
                        {
                            //登录失败
                            responseMsg.TK_CommandType = Constants.TK_CommandType.RESPONSE;
                            responseMsg.SetValue("ClientID", message.GetValue("ClientID"));
                            responseMsg.SetValue("RESPONSE_TO", message.SeqID);
                            responseMsg.SetValue("RESULT", "NOK");

                            Logger.Instance().SendLog("UM", "用户:" + sUserName + " 登录失败.");
                        }
                    }
                    else
                    {
                        //登录失败
                        responseMsg.TK_CommandType = Constants.TK_CommandType.RESPONSE;
                        responseMsg.SetValue("ClientID", message.GetValue("ClientID"));
                        responseMsg.SetValue("RESPONSE_TO", message.SeqID);
                        responseMsg.SetValue("RESULT", "NOK");

                        Logger.Instance().SendLog("UM", "无效登录包");
                    }
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                try
                {
                    //登录失败
                    responseMsg.TK_CommandType = Constants.TK_CommandType.RESPONSE;
                    responseMsg.SetValue("ClientID", message.GetValue("ClientID"));
                    responseMsg.SetValue("RESPONSE_TO", message.SeqID);
                    responseMsg.SetValue("RESULT", "NOK");

                    Logger.Instance().SendLog("UM", "登录时出现异常:" + ex.ToString());
                }
                catch { }
            }
            finally
            {
            }
            return(responseMsg);
        }
Esempio n. 23
0
        private async void OnCharacterSelected(ICommunicationMessage e, CharacterSession _characterSession)
        {
            // Should we have the menu on the left or right hand side?
            //MenuController.MenuAlignment = MenuController.MenuAlignmentOption.Right;
            this.characterSession = _characterSession;

            // Wait until player switch is done
            while (API.IsPlayerSwitchInProgress())
            {
                await Delay(300);
            }

            // Hide all other players
            foreach (var player in Players)
            {
                API.SetEntityLocallyInvisible(player.Handle);
            }

            // Hide the player's ped for everyone
            API.SetEntityInvincible(Game.PlayerPed.Handle, true);

            // Set player unable to move
            API.DisableAllControlActions(0);
            API.SetEntityLocallyVisible(Game.PlayerPed.Handle);

            // Create the camera
            this.customizeCharacterCamera = API.CreateCam("DEFAULT_SCRIPTED_CAMERA", true);

            // Activate and render
            API.SetCamActive(this.customizeCharacterCamera, true);
            API.RenderScriptCams(true, false, 0, true, true);

            // Get ped pos, head pos and the calculated camera pos
            var pedPos  = API.GetEntityCoords(Game.PlayerPed.Handle, true);
            var headPos = API.GetPedBoneCoords(Game.PlayerPed.Handle, (int)Bone.SKEL_Head, 0, 0, 0);
            var camPos  = new Vector3(headPos.X + 0.5f, headPos.Y - 1.1f, headPos.Z + 0.5f);

            // Set camera position and what to point at
            API.SetCamCoord(this.customizeCharacterCamera, camPos.X, camPos.Y, camPos.Z);
            API.PointCamAtCoord(this.customizeCharacterCamera, headPos.X, headPos.Y, headPos.Z);

            // Set player facing camera
            API.SetEntityHeading(Game.PlayerPed.Handle, API.GetHeadingFromVector_2d(camPos.X - pedPos.X, camPos.Y - pedPos.Y));

            var originalCamViewMode = API.GetFollowPedCamViewMode();

            API.SetFollowPedCamViewMode(0);

            // Hide HUD
            Screen.Hud.IsVisible = false;

            // Disable the loading screen from automatically being dismissed
            API.SetManualShutdownLoadingScreenNui(true);

            // Hide loading screen
            API.ShutdownLoadingScreen();

            // Show the overlay
            var overlay = new CharactersCustomizationOverlay(this.currentCharacter, this.customizeCharacterCamera, this.OverlayManager);

            overlay.OverlayOpenEvent += (sender, _e) => {
                this.Ticks.On(InvalidateIdleCam);
            };

            overlay.SaveCharacterEvent += (sender, _e) => {
                // Update the character
                //this.currentCharacter.Apparel = Character.GetApparelFromPed(Game.PlayerPed, this.currentCharacter.ApparelId);
                //this.currentCharacter.Appearance = Character.GetAppearanceFromPed(Game.PlayerPed, this.currentCharacter.AppearanceId);
                //this.currentCharacter.FaceShape = Character.GetFaceShapeFromPed(Game.PlayerPed, this.currentCharacter.FaceShapeId);
                //this.currentCharacter.Heritage = Character.GetHeritageFromPed(Game.PlayerPed, this.currentCharacter.HeritageId);
                this.currentCharacter = _e.Character;

                // Save the character
                this.Comms.Event(CharacterEvents.SaveCharacter).ToServer().Emit(this.currentCharacter);

                // Show all players again
                foreach (var player in Players)
                {
                    API.SetEntityLocallyVisible(player.Handle);
                }

                // Show the player's ped for everyone again
                API.SetEntityInvincible(Game.PlayerPed.Handle, false);

                // Set player able to move again
                API.EnableAllControlActions(0);

                // Close overlay
                overlay.Dispose();

                // Show HUD
                Screen.Hud.IsVisible = true;

                // Unset camera
                API.SetCamActive(this.customizeCharacterCamera, false);
                API.RenderScriptCams(false, false, 0, true, true);
                API.SetFollowPedCamViewMode(originalCamViewMode);

                // Dunno
                API.SetManualShutdownLoadingScreenNui(false);

                this.Ticks.Off(InvalidateIdleCam);
            };
            overlay.Focus(true);

            // Shut down the NUI loading screen
            API.ShutdownLoadingScreenNui();

            //API.FreezeEntityPosition(Game.Player.Handle, false);

            // Not working?
            //MenuController.EnableMenuToggleKeyOnController = false;
            //MenuController.MenuToggleKey = (Control)(-1);

            // Create the menu

            /*Menu characterCustomizationMenu = new Menu("Testing", "Customize your character");
             * MenuController.AddMenu(characterCustomizationMenu);
             *
             #region Sub menus
             * var hairSubMenu = new Menu("Hair", "Choose a fresh cut!");
             * var faceSubMenu = new Menu("Face", "Customize your face appearance");
             * var iconsSubMenu = new Menu("Icons", "Preview all icons here");
             #endregion
             *
             #region Create buttons for submenu
             * var hairButton = new MenuItem(hairSubMenu.MenuTitle, hairSubMenu.MenuSubtitle) {
             *      LeftIcon = MenuItem.Icon.BARBER
             * };
             * characterCustomizationMenu.AddMenuItem(hairButton);
             *
             * var faceButton = new MenuItem(faceSubMenu.MenuTitle, faceSubMenu.MenuSubtitle) {
             *      LeftIcon = MenuItem.Icon.MASK
             * };
             * characterCustomizationMenu.AddMenuItem(faceButton);
             *
             * var iconsButton = new MenuItem("Icons") {
             *      LeftIcon = MenuItem.Icon.INV_QUESTIONMARK
             * };
             * characterCustomizationMenu.AddMenuItem(iconsButton);
             *
             *
             * MenuController.BindMenuItem(characterCustomizationMenu, hairSubMenu, hairButton);
             * MenuController.BindMenuItem(characterCustomizationMenu, faceSubMenu, faceButton);
             * MenuController.BindMenuItem(characterCustomizationMenu, iconsSubMenu, iconsButton);
             #endregion
             *
             * foreach (int value in Enum.GetValues(typeof(MenuItem.Icon))) {
             *      string name = Enum.GetName(typeof(MenuItem.Icon), value);
             *      iconsSubMenu.AddMenuItem(new MenuItem(name) {
             *              LeftIcon = (MenuItem.Icon)value
             *      });
             * }
             *
             * characterCustomizationMenu.OnMenuOpen += (_menu) => {
             *      // Code in here gets triggered whenever the menu is opened.
             *      Logger.Debug($"OnMenuOpen: [{_menu}]");
             * };
             *
             * characterCustomizationMenu.OpenMenu();*/
        }
Esempio n. 24
0
 private static void OnLogMirror(ICommunicationMessage e, DateTime dt, LogLevel level, string prefix, string message)
 {
     new Logger(LogLevel.Trace, $"Client#{e.Client.Handle}|{prefix}").Log(message, level);
 }
Esempio n. 25
0
        public ICommunicationMessage SendCommand(long clientid, ICommunicationMessage command, int timeout)
        {
            // TODO:  添加 Communicator.sendCommand 实现
            command.SeqID = CommandProcessor.AllocateID();
            try
            {
                ICommunicator comm = null;
                lock (m_ClientCommunicators)
                {
                    if (!m_ClientCommunicators.ContainsKey(clientid))
                    {
                        return(null);
                    }

                    comm = m_ClientCommunicators[clientid];
                }

                ICommunicationMessage response = null;
                ManualResetEvent      mutex    = new ManualResetEvent(false);

                lock (this.m_MessagesWaitForResponse)
                {
                    m_MessagesWaitForResponse[command.SeqID] = new CommonPair <ICommunicationMessage, ManualResetEvent>(null, mutex);
                }

                comm.enqueueMessage(command);

                // 等待响应包的回填
                if (!mutex.WaitOne(timeout * 1000, false))
                {
                    throw new Exception(comm.RemoteEP.ToString() + "服务器通讯超时");
                }

                lock (m_ClientCommunicators)
                {
                    if (!m_ClientCommunicators.ContainsKey(clientid))
                    {
                        throw new Exception(comm.RemoteEP.ToString() + "服务器通讯中断");
                    }
                }

                lock (m_MessagesWaitForResponse)
                {
                    response = m_MessagesWaitForResponse[command.SeqID].First;
                    m_MessagesWaitForResponse.Remove(command.SeqID);
                }

                return(response);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                lock (m_MessagesWaitForResponse)
                {
                    m_MessagesWaitForResponse.Remove(command.SeqID);
                }
            }
        }
Esempio n. 26
0
 public ICommunicationMessage ImmediatelyInterpret(ICommunicationMessage cm)
 {
     return(null); // no immediately translation
 }
 /// <summary>
 /// Indicates if the message is a handshake message that is used to determine if
 /// two endpoints can communicate and how they will communicate.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <returns>
 /// <see langword="true" /> if the message is a handshake message; otherwise, <see langword="false" />.
 /// </returns>
 public static bool IsHandshake(this ICommunicationMessage message)
 {
     return(message is EndpointConnectMessage);
 }
 public ICommunicationMessage ImmediatelyInterpret(ICommunicationMessage cm)
 {
     return(null);
 }
        /// <summary>
        /// 命令处理程序
        /// </summary>
        /// <param name="message"></param>
        public void handleCommand(ICommunicationMessage message)
        {
            if (message.Contains(Constants.MSG_PARANAME_ADAPTER_NAME))
            {
                if (message.GetValue(Constants.MSG_PARANAME_ADAPTER_NAME).ToString().Trim() != Name)
                {
                    return;
                }
            }
            else
            {
                throw new Exception("Incoming package's name mismatched.");
            }

            CommandMsgV2 resp = new CommandMsgV2();

            resp.TK_CommandType = Constants.TK_CommandType.RESPONSE;
            resp.SeqID          = CommandProcessor.AllocateID();
            resp.SetValue(Constants.MSG_PARANAME_RESPONSE_TO, message.SeqID);
            try
            {
                if (message.Contains("ClientID"))
                {
                    resp.SetValue("ClientID", message.GetValue("ClientID"));
                }
                else
                {
                    throw new Exception("No ClientID in incoming package.");
                }
                //对应几个命令:启动、停止、退出、
                switch (message.TK_CommandType)
                {
                case Constants.TK_CommandType.ADAPTER_START:
                    if (Start())
                    {
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                    }
                    else
                    {
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                    }

                    break;

                case Constants.TK_CommandType.ADAPTER_STOP:
                    if (Stop())
                    {
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                    }
                    else
                    {
                        resp.SetValue(Constants.MSG_PARANAME_RESULT, "NOK");
                    }

                    break;

                case Constants.TK_CommandType.ADAPTER_SHUTDOWN:
                    Shutdown();
                    break;

                case Constants.TK_CommandType.ADAPTER_GETRUNTIMEINFO:
                {
                    Process p = Process.GetCurrentProcess();
                    resp.SetValue("PROCESSID", p.Id.ToString());
                    resp.SetValue("THREADCOUNT", p.Threads.Count.ToString());
                    resp.SetValue("PHYMEMORY", p.WorkingSet64.ToString());
                    resp.SetValue("STATUS", GetStatus().ToString());
                    resp.SetValue("STARTTIME", p.StartTime.ToString());
                    resp.SetValue("CPUTIME", ((long)p.TotalProcessorTime.TotalMinutes).ToString());
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                }
                break;

                case Constants.TK_CommandType.ADAPTER_GETOMCLIST:    //重点
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (string s in GetOMCList())
                    {
                        sb.Append(s);
                        sb.Append(",");
                    }

                    if (sb.Length > 0)
                    {
                        sb.Remove(sb.Length - 1, 1);
                    }

                    resp.SetValue("OMCLIST", sb.ToString());
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                }
                break;

                case Constants.TK_CommandType.ADAPTER_GETCURLOG:
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (string s in GetCurrentLog())
                    {
                        sb.Append(s);
                        sb.Append(Environment.NewLine);
                    }

                    resp.SetValue("CURLOG", sb.ToString());
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                }
                break;

                case Constants.TK_CommandType.ADAPTER_GETLOGFILES:
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (string s in GetLogFiles())
                    {
                        sb.Append(s);
                        sb.Append(",");
                    }

                    if (sb.Length > 0)
                    {
                        sb.Remove(sb.Length - 1, 1);
                    }

                    resp.SetValue("LOGFILES", sb.ToString());
                    resp.SetValue(Constants.MSG_PARANAME_RESULT, "OK");
                }
                break;

                default:
                    break;
                }

                CommandProcessor.instance().DispatchCommand(resp);
            }
            catch (Exception ex)
            {
                Logger.Instance().SendLog("AdapterController", ex.ToString());
            }
        }
Esempio n. 30
0
        public void ConvertFromMsg(ICommunicationMessage msg)
        {
            try
            {
                if (msg.TK_CommandType != Constants.TK_CommandType.ALARM_REPORT &&
                    msg.TK_CommandType != Constants.TK_CommandType.ADAPTER_ALARM_REPORT &&
                    msg.TK_CommandType != Constants.TK_CommandType.ALARM_ORDER_CHANGE)
                {
                    throw new Exception("无效告警报文.");
                }

                SyncRoot.AcquireWriterLock(-1);

                if (!msg.Contains("集中告警流水号"))
                {
                    throw new Exception("告警报文没有流水号.");
                }

                foreach (string key in msg.GetKeys())
                {
                    switch (key)
                    {
                    case "集中告警流水号":
                        TKSn = Convert.ToUInt64(msg.GetValue(key).ToString());
                        break;

                    case "厂商告警流水号":
                        ManuSn = msg.GetValue(key).ToString();
                        break;

                    case "告警城市":
                        City = msg.GetValue(key).ToString();
                        break;

                    case "设备厂商":
                        Manufacturer = msg.GetValue(key).ToString();
                        break;

                    case "业务类型":
                        BusinessType = msg.GetValue(key).ToString();
                        break;

                    case "网元名称":
                        NeName = msg.GetValue(key).ToString();
                        break;

                    case "网元类型":
                        NeType = msg.GetValue(key).ToString();
                        break;

                    case "对象名称":
                        ObjName = msg.GetValue(key).ToString();
                        break;

                    case "对象类型":
                        ObjType = msg.GetValue(key).ToString();
                        break;

                    case "告警名称":
                        AlarmName = msg.GetValue(key).ToString();
                        break;

                    case "重定义告警名称":
                        Redefinition = msg.GetValue(key).ToString();
                        break;

                    //case "告警种类":
                    //    Category = msg.GetValue(key).ToString();
                    //    break;
                    case "告警级别":
                        Severity = msg.GetValue(key).ToString();
                        break;

                    case "告警发生时间":
                        OccurTime = msg.GetValue(key).ToString();
                        break;

                    case "告警确认时间LV1":
                        AckTimeLV1 = msg.GetValue(key).ToString();
                        break;

                    case "再次确认时间LV1":
                        AckAgainTimeLV1 = msg.GetValue(key).ToString();
                        break;

                    case "告警确认时间LV2":
                        AckTimeLV2 = msg.GetValue(key).ToString();
                        break;

                    case "再次确认时间LV2":
                        AckAgainTimeLV2 = msg.GetValue(key).ToString();
                        break;

                    case "告警恢复时间":
                        ClearTime = msg.GetValue(key).ToString();
                        break;

                    case "告警定位信息":
                        Location = msg.GetValue(key).ToString();
                        break;

                    case "操作员信息LV11":
                        OperatorLV11 = msg.GetValue(key).ToString();
                        break;

                    case "操作员信息LV12":
                        OperatorLV12 = msg.GetValue(key).ToString();
                        break;

                    case "操作员信息LV21":
                        OperatorLV21 = msg.GetValue(key).ToString();
                        break;

                    case "操作员信息LV22":
                        OperatorLV22 = msg.GetValue(key).ToString();
                        break;

                    case "工程上报信息":
                        ProjectInfo = msg.GetValue(key).ToString();
                        break;

                    case "工程超时":
                        ProjectTimeOut = msg.GetValue(key).ToString();
                        break;

                    case "派单人LV1":
                        OrderOperatorLV1 = msg.GetValue(key).ToString();
                        break;

                    case "派单号LV1":
                        OrderIDLV1 = msg.GetValue(key).ToString();
                        break;

                    case "派单时间LV1":
                        OrderTimeLV1 = msg.GetValue(key).ToString();
                        break;

                    case "派单人LV2":
                        OrderOperatorLV2 = msg.GetValue(key).ToString();
                        break;

                    case "派单号LV2":
                        OrderIDLV2 = msg.GetValue(key).ToString();
                        break;

                    case "派单时间LV2":
                        OrderTimeLV2 = msg.GetValue(key).ToString();
                        break;

                    case "OMCName":
                        OMCName = msg.GetValue(key).ToString();
                        break;

                    case "Reserved2":
                        Reserved2 = msg.GetValue(key).ToString();
                        break;

                    case "Reserved3":
                        Reserved3 = msg.GetValue(key).ToString();
                        break;

                    case "接收时间":
                        ReceiveTime = msg.GetValue(key).ToString();
                        break;

                    default:
                        break;
                    }
                }
            }
            finally
            {
                SyncRoot.ReleaseWriterLock();
            }
        }