实现发送手机短讯息的类

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Runtime.InteropServices;

namespace UDS.Components
{
	/// <summary>
	/// SMS 
	/// </summary>
	public class SMS
	{
		int CommIndex = 1;
		/*
		#region 引用组件
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int OpenComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int CloseComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int ForceCloseComm(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int SendMsg(int CommIndex,string Msg,string MobileNo,int Msg_Index,bool Chinese);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern int GetUnSendCount(int CommIndex);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern bool GetNextSendMsg(int CommIndex, string Msg,bool DeleteAfterRead);
		[DllImport("../bin/AscendSMS.dll")]
		public static extern bool GetNewMsg(int CommIndex,  string Msg);
		#endregion
		
		/// <summary>
		/// 发送短消息
		/// 返回操作码 0 成功 -2 消息超过长度 -3 手机号码不正确 -4 发送阵列已满 -8 模块未打开 -1 串口未打开
		/// </summary>
		/// <param name="Msg">短消息内容</param>
		/// <param name="MobileNo">目标端手机号码,包括一般号码及特殊号码</param>
		/// <param name="MsgIndex">短消息标志位</param>
		/// <param name="IsZh">是否中文(中文为True,否则为False)</param>
		/// <returns>操作码</returns>
		public int SendMobileMsg(string Msg, string MobileNo, int MsgIndex,bool IsZh) 
		{
			CloseComm(CommIndex);
			OpenComm(CommIndex); 
			String[] MoA = MobileNo.Split(',');
			String[] RtnCodeA = MoA;
			for(int i=0;i<MoA.Length;i++)
			{
				int RtnCode = SendMsg(CommIndex,Msg,MoA[i],MsgIndex,IsZh);
				RtnCodeA[i] = RtnCode.ToString();
			}
			CloseComm(CommIndex);
			if(RtnCodeA[0]=="0")
				return 0;
			else
				return -1;
		}		
	    */

		public SMS()
		{
			//
			// TODO: 
			//
		}

		/// <summary>
		/// 得到在线人数
		/// </summary>
		/// <returns>返回int</returns>
        public int GetOnlineCount()
        {
            Database data = new Database();
            SqlDataReader dataReader = null;
            try
            {
                data.RunProc("SP_SMS_GetOnlineCount", out dataReader);
                if (dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
                else return 0;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("读取在线人数出错!", ex);
            }
            finally
            {
                data = null;
                dataReader = null;
            }
        }

		/// <summary>
		/// 得到新消息总数
		/// </summary>
		/// <returns>返回int</returns>
        public int GetNewMsgCount(string Username)
        {
            Database data = new Database();
            SqlDataReader dataReader = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
								   };
            try
            {
                data.RunProc("SP_SMS_GetNewMsgCount", prams, out dataReader);
                if (dataReader.Read()) return Int32.Parse(dataReader[0].ToString());
                else return 0;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到新消息总数出错!", ex);
            }
            finally
            {
                data = null;
                dataReader = null;
            }
        }

		/// <summary>
		/// 读消息
		/// </summary>
        public bool ReadMsg(string MsgIDS, string Username)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@MsgIDS",    SqlDbType.VarChar, 2000, MsgIDS),
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 20, Username),
								   };
            try
            {
                data.RunProc("SP_SMS_ReadMsg", prams);
                return true;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                //	throw new Exception("读消息出错!",ex);
                return false;
            }
            finally
            {
                data = null;
            }
        }


		/// <summary>
		/// 更新在线记录表.添加新的在线人员
		/// </summary>
        public void UpdateOnlineInfo(string Username, string HostAddr, string SessionID)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username),
									   data.MakeInParam("@hostaddr",    SqlDbType.VarChar, 50, HostAddr),
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 50, SessionID)
								   };
            try
            {
                data.RunProc("SP_SMS_UpdateOnlineInfo", prams);
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("更新在线记录表出错!", ex);
            }
            finally
            {
                data = null;
            }
        }

		/// <summary>
		/// 更新活动记录及检测未活动人员
		/// </summary>
        public string CheckUpdate(string Username, string SessionID, int ActiveNodeID)
        {
            string ReturnStr = "";
            int ReturnID = 0;
            int NewMsgFlag = 0;
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 100, Username),
									   data.MakeInParam("@sessionid",   SqlDbType.VarChar, 100, SessionID),
									   data.MakeInParam("@ActiveNodeID",   SqlDbType.Int, 4, ActiveNodeID),
									   data.MakeOutParam("@ReturnID", SqlDbType.Int, 4),
									   data.MakeOutParam("@NewMsgFlag", SqlDbType.Int, 4)
			};
            try
            {
                data.RunProc("SP_SMS_CheckUpdate", prams);
                ReturnID = Int32.Parse(prams[3].Value.ToString());
                if (ReturnID == -1)
                    NewMsgFlag = 0;
                else
                    NewMsgFlag = Int32.Parse(prams[4].Value.ToString());
                ReturnStr = ReturnID.ToString() + "|" + NewMsgFlag.ToString();
                data = null;
                return ReturnStr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("更新活动记录及检测未活动人员出错!", ex);
            }
            finally
            {
                data = null;
            }
        }

		/// <summary>
		/// 得到所有在线人员
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetOnlinePerson()
        {
            Database data = new Database();
            SqlDataReader dr = null;
            try
            {
                data.RunProc("sp_SMS_GetOnlinePerson", out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("读取在线人员数据出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到聊天记录
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetHistory(string Receiver, string Sender)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
									   data.MakeInParam("@Receiver",   SqlDbType.VarChar, 50, Receiver)
			};
            try
            {
                data.RunProc("SP_SMS_GetHistory", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到聊天记录出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到我所接收的所有短讯
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetMyReceive(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
								    };
            try
            {
                data.RunProc("SP_SMS_GetMyAllMsg", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到我所接收的所有短讯出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到我所发送的所有短讯
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetMySent(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@Username",    SqlDbType.VarChar, 50, Username)
								   };
            try
            {
                data.RunProc("SP_SMS_GetMySent", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到我所接收的所有短讯出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 得到某个人的最新一条消息
		/// </summary>
		/// <returns></returns>
        public SqlDataReader GetNewLocalMsg(string Username)
        {
            Database data = new Database();
            SqlDataReader dr = null;
            SqlParameter[] prams = {
									   data.MakeInParam("@username",    SqlDbType.VarChar, 50, Username)
									};
            try
            {
                data.RunProc("sp_SMS_GetNewMsg", prams, out dr);
                return dr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("得到某个人的最新一条消息出错!", ex);
            }
            finally
            {
                data = null;
                dr = null;
            }
        }

		/// <summary>
		/// 发送站内短消息
		/// </summary>
		/// <param name="sender">发送者用户名</param>
		/// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
		/// <param name="msg">短消息内容</param>
		/// <param name="sendtime">短消息发送时间</param>
		/// <returns>无返回值</returns>
        public void SendLocalMsg(string sender, string receivers, string msg, DateTime sendtime)
        {
            string newmsgid = "0";
            Database data = new Database();

            #region 存消息至数据库,返回MsgID
            SqlParameter[] prams1 = {
									   data.MakeInParam("@sender",    SqlDbType.VarChar, 50, sender),
									   data.MakeInParam("@content",   SqlDbType.VarChar, 255, msg),
									   data.MakeInParam("@type",   SqlDbType.Int, 1, 1),	
									   data.MakeInParam("@sendtime",   SqlDbType.DateTime, 30, sendtime),
									   data.MakeOutParam("@newmsgid", SqlDbType.Int, 4)									
								   };
            try
            {
                data.RunProc("SP_SMS_SendLocalMsg", prams1);
                newmsgid = prams1[4].Value.ToString();
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("存消息至数据库出错!", ex);
            }
            #endregion

            #region 将消息与接收者关联
            SqlParameter[] prams2 = {
									   data.MakeInParam("@MsgID",    SqlDbType.Int, 4, Int32.Parse(newmsgid)),
									   data.MakeInParam("@Receivers",SqlDbType.VarChar, 5000, receivers),
									   data.MakeInParam("@MobileNo",   SqlDbType.VarChar, 4, ""),	
									  data.MakeInParam("@type",   SqlDbType.Int, 1, 1)
								   };
            try
            {
                data.RunProc("SP_SMS_SetMsgReceiver", prams2);
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("将消息与接收者关联出错!", ex);
            }
            #endregion
        }

		/// <summary>
		///  发站用户站内手机短消息
		/// </summary>
		/// <param name="Sender">发送者用户名</param>
		/// <param name="RecipientMobileNo">接受者手机号码,可用逗号相隔多人</param>
		/// <param name="Content">短消息内容</param>
		/// <param name="Sendtime">短消息发送时间</param>
		/// <param name="RepeatTimes">短消息重复发送次数</param>
		/// <param name="RepeatPeriod">重复发送周期,以分钟为单位</param>
		/// <returns>返回执行代码 1 正常 2 错误</returns>
        public static int SaveMobileMsgToBuffer(string Sender, string RecipientMobileNo, string Content, DateTime Sendtime, int RepeatTimes, int RepeatPeriod)
        {
            Database data = new Database();

            #region 存消息至数据库,返回MsgID
            SqlParameter[] prams1 = {
										data.MakeInParam("@Sender",    SqlDbType.VarChar, 50, Sender),
										data.MakeInParam("@RecipientMobileNo",   SqlDbType.VarChar, 255, RecipientMobileNo),
										data.MakeInParam("@Content",   SqlDbType.VarChar, 255, Content),	
										data.MakeInParam("@Sendtime",   SqlDbType.DateTime, 30, Sendtime),
										data.MakeInParam("@RepeatTimes", SqlDbType.Int, 4,RepeatTimes),
										data.MakeInParam("@RepeatPeriod", SqlDbType.Int, 4,RepeatPeriod)						
									};
            try
            {
                data.RunProc("SP_SMS_SaveMobileMsgToBuffer", prams1);
                return 1;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("存消息至数据库出错!", ex);
            }
            #endregion
        }
		
        /// <summary>
		/// 发送短消息
		/// </summary>
		/// <param name="sender">发送者用户名</param>
		/// <param name="receivers">接受者用户名,可用逗号相隔多人</param>
		/// <param name="msg">短消息内容</param>
		/// <param name="type">短消息类型 1为站内消息 2为手机短讯 3为站外手机(取mobileno)</param>
		/// <param name="sendtime">短消息发送时间</param>
		/// <param name="mobileno">如果是站外用户时用。表示站外用户的手机号</param>
		/// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送次数</param>
		/// <param name="repeattimes">如果是手机短讯时用。表示此条讯息的重复发送时间间隔(以分钟为单位)</param>
		/// <returns>返回操作结束代码</returns>
        public int SendMsg(string sender, string recipients, string msg, int type, DateTime sendtime, string mobileno, int repeattimes, int repeatperiod)
        {
            int RtnCode = 1;
            //去除最后一位的逗号,并替换全角至半角
            if (recipients.EndsWith(",")) recipients = recipients.Substring(0, recipients.Length - 1);
            {
                recipients = recipients.Replace(",", ",");
            }
            switch (type)
            {
                case 1://站内用户的站内短讯
                    SendLocalMsg(sender, recipients, msg, sendtime);
                    return RtnCode;

                case 2: //站内用户的手机短讯
                    string MobileNoStr = GetMobileNoByUsername(recipients);
                    RtnCode = SaveMobileMsgToBuffer(sender, MobileNoStr, msg, sendtime, repeattimes, repeatperiod);
                    return RtnCode;

                case 3: //站外用户的手机短讯
                    RtnCode = SaveMobileMsgToBuffer(sender, mobileno, msg, sendtime, repeattimes, repeatperiod);
                    return RtnCode;

                default:
                    return RtnCode;
            }
        }

		#region 根据用户名字符串获取手机号码字符串
		/// <summary>
		/// 根据用户名字符串获取手机号码字符串
		/// <param name="Username">用户名字符串,用逗号相隔</param>
		/// <returns>返回手机字符串</returns>
		/// </summary>
        public string GetMobileNoByUsername(string Username)
        {
            string MobileNoStr = "";
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@UserNameStr",    SqlDbType.VarChar, 3000, Username),
									   data.MakeOutParam("@MobileNoStr", SqlDbType.VarChar, 3000)
			                      };
            try
            {
                data.RunProc("SP_SMS_GetMobileNoByUsername", prams);
                MobileNoStr = prams[1].Value.ToString();
                return MobileNoStr;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                throw new Exception("根据用户名字符串获取手机号码字符串出错!", ex);
            }
            finally
            {
                data = null;
            }
        }
		#endregion

		/// <summary>
		/// 删除一组短讯
		/// </summary>
		/// <param name="MsgIDS">消息ID的连接字符串,用逗号相隔开</param>
        public bool MsgDelete(string MsgIDS)
        {
            Database data = new Database();
            SqlParameter[] prams = {
									   data.MakeInParam("@MsgIDS",   SqlDbType.VarChar,4000, MsgIDS)
								   };
            try
            {
                data.RunProc("SP_SMS_DelMsg", prams);
                data = null;
                return true;
            }
            catch (Exception ex)
            {
                Error.Log(ex.ToString());
                return false;
            }
        }
	}
}

你可能感兴趣的:(活动)