/// <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, }); }
/// <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); }
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); }
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); }
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; } } }
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); } }
/// <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); }
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); }
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 { } }
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); } }
private void GetCharacterById(ICommunicationMessage e, Guid characterId) { using (var ctx = new StorageContext()) { e.Reply(ctx.Characters.FirstOrDefault(c => c.Id == characterId)); } }
private async void OnPlayerDisconnected(ICommunicationMessage e, IClient client, Session session) { await DeselectAll(session.UserId); API.DropPlayer(client.License, "Disconnect from character selection"); }
private bool _sendMessage(ICommunicationMessage msg) { byte[] newbuf = m_Encoder.encodeMessage(msg, m_bCompress); return(_sendMessage(newbuf)); }
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(); } }
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)); }
public ICommunicationMessage SendCommand(long clientid, ICommunicationMessage command) { return(SendCommand(clientid, command, m_SyncCmdTimeout)); }
private void GetAllCharactersForUser(ICommunicationMessage e) { GetAllCharactersForUser(e, e.User.Id); }
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); }
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();*/ }
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); }
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); } } }
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()); } }
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(); } }