/// <summary> /// Dpsc收到資料事件 /// </summary> /// <param name="sender"></param> /// <param name="dataType"></param> /// <param name="data"></param> private void fDpsc_OnRcvData(Dpsc sender, ushort dataType, byte[] data) { if (dataType == fChannel) { fForwardingCount++; //直接把收到封包轉發出去 fBroadcasting(data, dataType); } }
/// <summary> /// 發送模組 /// </summary> /// <param name="dpscKey"></param> /// <param name="dpscIp"></param> /// <param name="dpscPort"></param> /// <param name="chkSum"></param> /// <param name="outputMessage"></param> /// <param name="broadcasting"></param> /// <param name="channel"></param> public ForwardModule(string dpscKey, string dpscIp, ushort dpscPort, uint chkSum, Action <string> outputMessage, Action <byte[], ushort> broadcasting, uint channel) { fOutputMessage = outputMessage; fBroadcasting = broadcasting; fChannel = channel; fDpsc = new Dpsc(dpscKey); fDpsc.ServerHost = dpscIp; fDpsc.ServerPort = dpscPort; fDpsc.SysCheckSum = chkSum; fDpsc.OnStatus += fDpsc_OnStatus; fDpsc.OnRcvData += fDpsc_OnRcvData; fDpsc.Connect(); }
public MainForm() { InitializeComponent(); fSetting = new Settings(); MarketType marketType = (MarketType)fSetting.ApMartketType; this.Text = string.Format("{0} {1} Ver:{2} x{3}", marketType, Application.ProductName, Application.ProductVersion, IntPtr.Size * 8); //服務原始IDKey string originKey = string.Format("{0}:{1}", Dpsc.GetServiceOriginalKey(fSetting.DpscPort, Assembly.GetExecutingAssembly()), marketType); TextBox_DpscKeyId.Text = originKey; // dataGridView 錯誤處理 (不然會跳exception) DataGridView_Clients.DataError += DataGridView_Clients_DataError; fProxyServer = new ProxyServer(fSetting.MulticastPort, fSetting.IsKeepNewConnectionWhenOverLimit, fSetting.ClientHeartBeatFrequency, fSetting.ClientSameIPLimitCount, OutMessages); fProxyServer.OnStatus.OnFireEvent += fProxyServer_OnStatusMessage; // 心跳封包樣本 fHeartbeat = new Heartbeat(new TimeSpan(0, 0, fSetting.HeartBeatFrequency), fProxyServer.Broadcasting); fProxyServer.SetHeartBeatPackage(fHeartbeat.HeartbeatBytes, Heartbeat.HEART_BEAT_DATA_TYPE); //發送模組 fForwardModule = new ForwardModule(originKey, fSetting.DpscIp, fSetting.DpscPort, fSetting.DpscChk, OutMessages, fHeartbeat.BlockingHeartbeat, fSetting.RawDataChannel ); // datagrid綁資料結構 fBindingSource = new BindingSource(); fBindingSource.DataSource = fProxyServer.GetAvailableClinets(); DataGridView_Clients.DataSource = fBindingSource; }
/// <summary> /// Dpsc連線事件 /// </summary> /// <param name="sender"></param> /// <param name="status"></param> /// <param name="message"></param> private void fDpsc_OnStatus(Dpsc sender, Dpsc.DpscStatusList status, string message) { switch (status) { case Dpsc.DpscStatusList.DebugError: break; case Dpsc.DpscStatusList.Connecting: { fOutputMessage("Dpsc連線中"); } break; case Dpsc.DpscStatusList.Connected: { fOutputMessage("Dpsc連線成功"); //訂閱即時條件頻道 fDpsc.SubChannel(fChannel); } break; case Dpsc.DpscStatusList.KeepAlive: break; case Dpsc.DpscStatusList.SubChannel: { fOutputMessage(string.Format("訂閱{0}", message)); } break; case Dpsc.DpscStatusList.DisSubChannel: break; case Dpsc.DpscStatusList.ServerTime: break; case Dpsc.DpscStatusList.DisConnect: { fOutputMessage("Dpsc斷線了"); fDpsc.Connect(); } break; case Dpsc.DpscStatusList.ConnectTimeout: { fOutputMessage("Dpsc連線逾時"); fDpsc.Connect(); } break; case Dpsc.DpscStatusList.UserDisConnect: { fOutputMessage("使用者將Dpsc斷開"); } break; default: break; } }