/// <summary> /// 调用消息广播接口 /// </summary> /// <returns></returns> public static BaseResult Broadcast(BaseUserInfo userInfo, string systemCode, bool allcompany, string[] roleIds , string[] areaIds, string[] companyIds, bool subCompany , string[] departmentIds, bool subDepartment, string[] userIds, string message, bool onlineOnly, MessageFunction functionCode = MessageFunction.Remind, DateTime?expireAt = null) { BaseResult result = null; string url = BaseSystemInfo.UserCenterHost + "/UserCenterV42/MessageService.ashx"; WebClient webClient = new WebClient(); NameValueCollection postValues = new NameValueCollection(); postValues.Add("system", BaseSystemInfo.SoftFullName); postValues.Add("systemCode", systemCode); postValues.Add("securityKey", BaseSystemInfo.SecurityKey); postValues.Add("function", "Broadcast"); postValues.Add("userInfo", userInfo.Serialize()); postValues.Add("allcompany", allcompany.ToString()); if (roleIds != null) { postValues.Add("roleIds", string.Join(",", roleIds)); } if (areaIds != null) { postValues.Add("areaIds", string.Join(",", areaIds)); } if (companyIds != null) { postValues.Add("companyIds", string.Join(",", companyIds)); } postValues.Add("subCompany", subCompany.ToString()); if (departmentIds != null) { postValues.Add("departmentIds", string.Join(",", departmentIds)); } postValues.Add("subDepartment", subDepartment.ToString()); if (userIds != null) { postValues.Add("userIds", string.Join(",", userIds)); } postValues.Add("message", HttpUtility.HtmlEncode(message)); postValues.Add("onlineOnly", onlineOnly.ToString()); // 2016-04-06 吉日嘎拉 提高弹出消息的位置 postValues.Add("functionCode", functionCode.ToString()); if (expireAt.HasValue) { postValues.Add("expireAt", expireAt.Value.ToString(BaseSystemInfo.DateTimeFormat)); } // 向服务器发送POST数据 byte[] responseArray = webClient.UploadValues(url, postValues); string response = Encoding.UTF8.GetString(responseArray); if (!string.IsNullOrEmpty(response)) { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); result = javaScriptSerializer.Deserialize <BaseResult>(response); } return(result); }
void HandleClientMessage(NetIncomingMessage msg) { MessageFunction type = (MessageFunction)msg.ReadInt32(); switch (type) { case MessageFunction.ClassMessage: string assemblyName = msg.ReadString(); string classType = msg.ReadString(); Message report = (Message)Activator.CreateInstance(assemblyName, classType).Unwrap(); msg.ReadAllFields(report); report.OnCalled(report, msg); break; case MessageFunction.SpawnAllPlayer: int count = msg.ReadInt32(); for (int i = 0; i < count; i++) { int id = msg.ReadInt32(); string playerName = msg.ReadString(); SpawnPlayer(id, playerName); } int newId = SpawnLocalPlayer(); MessageSpawnPlayer spawnMessage = new MessageSpawnPlayer(); spawnMessage.playerId = newId; spawnMessage.playerName = PlatformService.personaName; SendNetworkMessage(spawnMessage, SendTo.Others); break; case MessageFunction.UpdateVehiclesPositions: m_vNetworkManager.UpdateCarsPositions(msg); break; case MessageFunction.RemoveVehicle: int carID2 = msg.ReadInt32(); m_vNetworkManager.RemoveCar(carID2); break; case MessageFunction.UpdateCitizensPositions: m_cNetworkManager.UpdateCitizensPositions(msg); break; default: Debug.LogWarning("Unhandled msg type: " + type.ToString()); break; } }
void HandleSeverMessage(NetIncomingMessage msg) { MessageFunction type = (MessageFunction)msg.ReadInt32(); switch (type) { case MessageFunction.ClassMessage: SendTo sendTo = (SendTo)msg.ReadInt32(); string assemblyName = msg.ReadString(); string classType = msg.ReadString(); Message report = (Message)Activator.CreateInstance(assemblyName, classType).Unwrap(); msg.ReadAllFields(report); SendNetworkMessage(report, sendTo, msg); break; case MessageFunction.SpawnPlayer: // broadcast this to all connections, except sender List <NetConnection> all2 = m_server.Connections; // get copy all2.Remove(msg.SenderConnection); int id2 = msg.ReadInt32(); string playerName = msg.ReadString(); if (all2.Count > 0) { NetOutgoingMessage om = m_server.CreateMessage(); om.Write((int)MessageFunction.SpawnPlayer); om.Write(id2); om.Write(playerName); m_server.SendMessage(om, all2, NetDeliveryMethod.ReliableUnordered, 0); } SpawnPlayer(id2, playerName, msg.SenderConnection); break; default: Debug.LogWarning("Unhandled msg type: " + type.ToString()); break; } }
/// <summary> /// 获取新信息个数,类别应该是收的信息,不是发的信息 /// </summary> /// <returns>记录个数</returns> public int GetNewCount(MessageFunction messageFunction) { int returnValue = 0; string sqlQuery = " SELECT COUNT(*) " + " FROM " + BaseMessageEntity.TableName + " WHERE (" + BaseMessageEntity.FieldIsNew + " = " + ((int)MessageStateCode.New).ToString() + " ) " + " AND (" + BaseMessageEntity.FieldCategoryCode + " = 'Receiver' )" + " AND (" + BaseMessageEntity.FieldReceiverId + " = '" + UserInfo.Id + "' )" + " AND (" + BaseMessageEntity.FieldDeletionStateCode + " = 0 )" + " AND (" + BaseMessageEntity.FieldFunctionCode + " = '" + messageFunction.ToString() + "' )"; object returnObject = DbHelper.ExecuteScalar(sqlQuery); if (returnObject != null) { returnValue = int.Parse(returnObject.ToString()); } return(returnValue); }
private byte[] TryExecute(MessageFunction function, byte[] data) { byte[] replyData = null; try { Debug.WriteLine("TryExecute " + function.ToString()); if (!this.client.Connected) { Debug.WriteLine("Failed. Reconnect"); Connect(); } if (this.client.Connected) { replyData = Execute(function, data); } else { Debug.WriteLine("Reconnect failed"); } } catch (Exception ex) { Debug.WriteLine("TryExecute failed: " + ex.ToString()); } return replyData; }
/// <summary> /// 获取新信息个数,类别应该是收的信息,不是发的信息 /// </summary> /// <returns>记录个数</returns> public int GetNewCount(MessageFunction messageFunction) { int returnValue = 0; string sqlQuery = " SELECT COUNT(*) " + " FROM " + BaseMessageEntity.TableName + " WHERE (" + BaseMessageEntity.FieldIsNew + " = " + ((int)MessageStateCode.New).ToString() + " ) " + " AND (" + BaseMessageEntity.FieldCategoryCode + " = 'Receiver' )" + " AND (" + BaseMessageEntity.FieldReceiverId + " = '" + UserInfo.Id + "' )" + " AND (" + BaseMessageEntity.FieldDeletionStateCode + " = 0 )" + " AND (" + BaseMessageEntity.FieldFunctionCode + " = '" + messageFunction.ToString() + "' )"; object returnObject = DbHelper.ExecuteScalar(sqlQuery); if (returnObject != null) { returnValue = int.Parse(returnObject.ToString()); } return returnValue; }
public int BroadcastProcess(string systemCode, bool allcompany, string[] roleIds, string[] areaIds, string[] companyIds, bool subCompany, string[] departmentIds, bool subDepartment, string[] userIds, string message, bool onlineOnly, MessageFunction functionCode = MessageFunction.SystemPush, DateTime?expireAt = null) { int result = 0; // 1: 这里需要生成一个sql语句。 // 2: 只发给中天客户端,中天客户端有登录过的用户? // 3: 一边读取一边执行发送指令,马上能见效。 // 4: 节约数据库资源,节约服务器资源。 // 5: 广播提醒,过期时间1周就可以了,太时间了,浪费内存资源。 // 2015-09-29 吉日嘎拉 从最高到最低的顺序判断 string commandText = " SELECT " + BaseUserEntity.FieldId + " FROM " + BaseUserEntity.TableName + " WHERE " + BaseUserEntity.FieldEnabled + " = 1 " + " AND " + BaseUserEntity.FieldDeletionStateCode + " = 0 " + " AND " + BaseUserEntity.FieldUserFrom + " = 'Base' "; if (allcompany) { // 什么都不过滤 } if (areaIds != null) { // 这个需要进行叠加处理 commandText += " AND " + BaseUserEntity.FieldCompanyId + " IN ( " + " SELECT " + BaseOrganizeEntity.FieldId + " FROM " + BaseOrganizeEntity.TableName + " WHERE " + BaseOrganizeEntity.FieldEnabled + " = 1 " + " AND " + BaseOrganizeEntity.FieldDeletionStateCode + " = 0 " + " AND (" + BaseOrganizeEntity.FieldProvinceId + " IN (" + StringUtil.ArrayToList(areaIds) + ")" + " OR " + BaseOrganizeEntity.FieldCityId + " IN (" + StringUtil.ArrayToList(areaIds) + ")" + " OR " + BaseOrganizeEntity.FieldStreetId + " IN (" + StringUtil.ArrayToList(areaIds) + ")" + " OR " + BaseOrganizeEntity.FieldDistrictId + " IN (" + StringUtil.ArrayToList(areaIds) + ")) )"; } if (subCompany) { commandText += " AND " + BaseUserEntity.FieldCompanyId + " IN ( " + " SELECT " + BaseOrganizeEntity.FieldId + " FROM " + BaseOrganizeEntity.TableName + " WHERE " + BaseOrganizeEntity.FieldEnabled + " = 1 " + "AND " + BaseOrganizeEntity.FieldDeletionStateCode + " = 0 " + "AND " + BaseOrganizeEntity.FieldId + " IN (" + StringUtil.ArrayToList(companyIds) + ") UNION " + " SELECT " + BaseOrganizeEntity.FieldId + " FROM " + BaseOrganizeEntity.TableName + " WHERE " + BaseOrganizeEntity.FieldEnabled + " = 1 " + "AND " + BaseOrganizeEntity.FieldDeletionStateCode + " = 0 " + " START WITH " + BaseOrganizeEntity.FieldParentId + " IN (" + StringUtil.ArrayToList(companyIds) + ") " + " CONNECT BY PRIOR " + BaseOrganizeEntity.FieldId + " = " + BaseOrganizeEntity.FieldParentId + ")"; } if (companyIds != null && companyIds.Length > 0) { commandText += " AND " + BaseUserEntity.FieldCompanyId + " IN (" + StringUtil.ArrayToList(companyIds) + ")"; } if (subDepartment) { commandText += " AND " + BaseUserEntity.FieldDepartmentId + " IN ( " + " SELECT " + BaseDepartmentEntity.FieldId + " FROM " + BaseDepartmentEntity.TableName + " WHERE " + BaseDepartmentEntity.FieldEnabled + " = 1 " + " AND " + BaseDepartmentEntity.FieldDeletionStateCode + " = 0 " + " AND " + BaseOrganizeEntity.FieldDeletionStateCode + " = 0 " + "AND " + BaseDepartmentEntity.FieldId + " IN (" + StringUtil.ArrayToList(departmentIds) + ") UNION " + " SELECT " + BaseDepartmentEntity.FieldId + " FROM " + BaseDepartmentEntity.TableName + " WHERE " + BaseDepartmentEntity.FieldEnabled + " = 1 " + " AND " + BaseDepartmentEntity.FieldDeletionStateCode + " = 0 " + " AND " + BaseOrganizeEntity.FieldDeletionStateCode + " = 0 " + " START WITH " + BaseDepartmentEntity.FieldParentId + " IN (" + StringUtil.ArrayToList(departmentIds) + ") " + " CONNECT BY PRIOR " + BaseDepartmentEntity.FieldId + " = " + BaseDepartmentEntity.FieldParentId + ") "; } if (departmentIds != null && departmentIds.Length > 0) { commandText += " AND " + BaseUserEntity.FieldDepartmentId + " IN (" + StringUtil.ArrayToList(departmentIds) + ")"; } if (roleIds != null && roleIds.Length > 0) { string tableName = systemCode + "UserRole"; commandText += " AND " + BaseUserEntity.FieldId + " IN ( SELECT UserId FROM " + tableName + " WHERE RoleId IN (" + StringUtil.ArrayToList(roleIds) + "))"; } if (userIds != null && userIds.Length > 0) { commandText += " AND " + BaseUserEntity.FieldId + " IN (" + StringUtil.ArrayToList(userIds) + ")"; } using (var redisClient = PooledRedisHelper.GetMessageClient()) { var userManager = new BaseUserManager(this.UserInfo); using (IDataReader dataReader = userManager.ExecuteReader(commandText)) { while (dataReader.Read()) { string[] receiverIds = new string[] { dataReader[BaseUserEntity.FieldId].ToString() }; BaseMessageEntity entity = new BaseMessageEntity(); // entity.Id = BaseBusinessLogic.NewGuid(); entity.FunctionCode = functionCode.ToString(); // entity.FunctionCode = MessageFunction.SystemPush.ToString(); // entity.FunctionCode = MessageFunction.Remind.ToString(); entity.Contents = message; entity.CreateCompanyId = this.UserInfo.CompanyId; entity.CreateCompanyName = this.UserInfo.CompanyName; entity.CreateDepartmentId = this.UserInfo.DepartmentId; entity.CreateDepartmentName = this.UserInfo.DepartmentName; entity.CreateUserId = this.UserInfo.Id; entity.CreateBy = this.UserInfo.RealName; entity.IPAddress = this.UserInfo.IPAddress; entity.CreateOn = DateTime.Now; entity.IsNew = 1; entity.ReadCount = 0; entity.DeletionStateCode = 0; if (!expireAt.HasValue) { expireAt = DateTime.Now.AddDays(5); } result = Send(redisClient, entity, receiverIds, false, expireAt); } } } return(result); }