2)基站信息维护
基站信息维护模块的主要功能是查询、新增、删除、修改基站的各类信息,包括BSC、模块、基站号、基站中文名、英文名、基站统一编号、备注等。
核心代码如下:
public frmStation(StationAlarm.frmContainer parent)
{
// Windows 窗体设计器支持所必需的
InitializeComponent();
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
this.MdiParent = parent;
frmContainer mainWindow = (frmContainer)this.MdiParent;
SiteQuery();//查询基站信息
}
private void SiteQuery()
{
//基站信息查询
string sql, queryCondition;
string connString = @"Data Source=StationAlarm.mdb;Provider=Microsoft.Jet.OLEDB.4.0;";
//合成查询条件
queryCondition = "";
if( bsc.Text!="所有BSC" )
queryCondition = " and BSC=" + bsc.Text;
if( siteId.Text.Trim()!="" )
queryCondition += " and SiteID=" + siteId.Text;
if( ci.Text.Trim()!="" )
queryCondition += " and CI=" + ci.Text;
if( siteName.Text.Trim()!="" )
queryCondition += " and SiteName like '%" + siteName.Text + "%'";
if( siteEnName.Text.Trim()!="" )
queryCondition += " and SiteEnName like '%" + siteEnName.Text + "%'";
OleDbConnection conn = new OleDbConnection( connString );
try
{
conn.Open();
//取基站信息表记录
sql = "SELECT BSC, ModuleID as 模块, SiteID as 基站号, SiteName as 基站中文名称, SiteEnName as 基站英文名称, CI as 基站统一编号, SiteMemo as 备注 FROM SiteInfo ";
sql += " WHERE 1=1 " + queryCondition;
da2 = new OleDbDataAdapter(sql,conn);
cmdBuilder = new OleDbCommandBuilder(da2);
siteInfo.Clear();
da2.Fill( siteInfo, "SiteInfo" );
DataColumn[] keys = new DataColumn[3];
keys[0] = siteInfo.Tables[0].Columns["BSC"];
keys[1] = siteInfo.Tables[0].Columns["模块"];
keys[2] = siteInfo.Tables[0].Columns["基站号"];
siteInfo.Tables[0].PrimaryKey = keys;
conn.Close();
dgStation.SetDataBinding(siteInfo.Tables[0].DefaultView,""); //填充datagrid
}
catch
{
if( conn!=null && conn.State==ConnectionState.Open )
conn.Close();
}
}
private void queryButton_Click(object sender, System.EventArgs e)
{
SiteQuery();//查询基站信息
}
3)告警信息维护
告警信息维护的主要功能是新增、删除、修改告警编号、告警名称、告警类型、告警级别、备注等。具体代码与基站信息维护类似。
4)误告警维护
基站误告警维护模块的主要功能是新增、删除、修改产生误告警的基站信息,包括BSC、模块、基站号、告警编号、间隔分钟等。
具体代码与基站信息维护类似。
(2)监听分析
监听分析模块是后台数据处理模块,主要功能是监听网络通信包,按规则提取包数据内容,分离出告警信息的各类属性值,并将这些信息保存到数据库,然后根据需要播放声音告警,包括网络监听模块、数据分析模块、声音告警模块等。
1)网络监听
要对网络通信进行监听,首先要让网卡工作在混杂模式下,这样网卡才能接收到网络上所有的通信包。
核心代码如下:
private void SetSocketOption()
{
SniffSocketException ex;
try
{
socket.SetSocketOption (SocketOptionLevel.IP ,SocketOptionName.HeaderIncluded ,1);
byte[] IN=new byte [4]{1,0,0,0};
byte[] OUT=new byte[4];
int SIO_RCVALL=unchecked((int)0x98000001);
int ret_code=socket.IOControl (SIO_RCVALL,IN,OUT);
ret_code=OUT[0]+OUT[1]+OUT[2]+OUT[3];
if(ret_code!=0)
{
ex=new SniffSocketException ("command execute error");
throw ex;
}
}
catch(SocketException e)
{
ex=new SniffSocketException ("socket error",e);
throw ex;
}
}
当系统捕获到通信包时,触发相应的事件,事件处理模块将包数据复制到包数据缓冲区中。
核心代码如下:
private void motoDataArrival(Object sender, SniffSocket.PacketArrivedEventArgs e)
{
//处理MOTOROLA告警系统通信包到达事件
if( e.DestinationAddress==clientIP1 && e.OriginationAddress==serverIP1 && e.OriginationPort==port1 && e.PacketLength>165 )
{
try
{
//告警服务器IP地址、告警终端地址、端口和通信包长度属于MOTOROLA告警系统
Message m = new Message();
m.BSCType = "Moto";
m.BSC = "0";
m.length = e.PacketLength;
e.MessageBuffer.CopyTo(m.buffer, 0);
MessagePacket.Add(m);
statusBar.Panels[0].Text = "Motorola: " + e.PacketLength.ToString() + " 时间:" + System.DateTime.Now.ToString();//在状态栏显示通信包长度和接收时间
}
catch (Exception ex)
{
SaveError("motoDataArrival", ex);//保存错误信息
}
}
}
private void hua1DataArrival(Object sender, SniffSocket.PacketArrivedEventArgs e)
{
//处理华为告警系统1通信包到达事件
if (e.DestinationAddress == clientIP2 && e.OriginationAddress == serverIP2 && e.OriginationPort == port2 && e.PacketLength >= 165 && e.PacketLength < 1499)
{
try
{
//告警服务器IP地址、告警终端地址、端口和通信包长度属于华为告警系统1
Message m = new Message();
m.BSCType = "HuaWei";
m.BSC = "4";
m.length = e.PacketLength;
e.MessageBuffer.CopyTo(m.buffer, 0);
MessagePacket.Add(m);
statusBar.Panels[1].Text = "华为1: " + e.PacketLength.ToString() + " 时间:" + System.DateTime.Now.ToString();//在状态栏显示通信包长度和接收时间
}
catch (Exception ex)
{
SaveError("hua1DataArrival", ex); //保存错误信息
}
} }
|