| 
				 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); //保存错误信息 
} 
} }			
				 |