示例#1
0
        /// <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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        /// <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);
        }
示例#5
0
文件: Client.cs 项目: dbrgn/pi-vote
        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;
        }
示例#6
0
 /// <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;
 }
示例#7
0
        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);
        }