private void OnReceiveEvent(SCB scb, MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data) { SyncBlock syncBlock; if ((flag & MessageFlag.Sync) != 0) { if (channel > int.MaxValue) { //server side ssend EventHandler <Event.ReceiveEventArgs> receiveEventHandler = ReceiveEventHandler; if (receiveEventHandler != null) { try { Event.ReceiveEventArgs args = new Event.ReceiveEventArgs(scb.Id, scb.RemoteIPEndPoint, flag, evt, cableId, channel, data); receiveEventHandler(this, args); InnerASend(flag, evt, cableId, args.ReturnData); } catch { } } } else if (TryGetSyncChannel(channel, out syncBlock)) { syncBlock.RetData = data; syncBlock.AutoEvent.Set(); } } else { EventHandler <Event.ReceiveEventArgs> receiveEventHandler = ReceiveEventHandler; if (receiveEventHandler != null) { try { receiveEventHandler(this, new Event.ReceiveEventArgs(scb.Id, scb.RemoteIPEndPoint, flag, evt, cableId, channel, data)); } catch { } } } }
private void OnReceiveEvent(SCB scb, MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data) { EventHandler <Event.ReceiveEventArgs> receiveEventHandler = DataReceived; if (receiveEventHandler != null) { Event.ReceiveEventArgs args = new Event.ReceiveEventArgs(scb.Id, scb.RemoteIPEndPoint, flag, evt, cableId, channel, data); _WorkThreads[scb.Id % _WorkThreads.Length].ASendMessage(args); } }
private void ProcInnerMessage(Event.ReceiveEventArgs message) { try { switch ((InnerEvent)message.Event) { case InnerEvent.GetProcessorId: { //Get processorid and cableid //Only syncronize connection of single connection cable will //Send this event to server to alloc //Processor mask from client ulong mask = LittleEndianBitConverter.ToUInt64(message.Data, 0); //Get Processor id int pId = _AllocClientProcessor.GetProcessorId(((IPEndPoint)message.RemoteIPEndPoint).Address, mask, message.SCBID); //Get cable id SCB scb = GetSCB((IPEndPoint)message.RemoteIPEndPoint); UInt16 cableId = _CableIdAllocator.Alloc(scb.RemoteIPEndPoint); scb.CableId = cableId; message.ReturnData = new byte[sizeof(int) + sizeof(UInt16)]; Array.Copy(LittleEndianBitConverter.GetBytes(pId), 0, message.ReturnData, 0, sizeof(int)); Array.Copy(LittleEndianBitConverter.GetBytes(cableId), 0, message.ReturnData, sizeof(int), sizeof(UInt16)); } break; } } catch (Exception e) { OnErrorEvent("ProcInnerMessage", e); } }
private void OnQueueMessage(Event.ReceiveEventArgs message) { EventHandler <Event.ReceiveEventArgs> receiveEventHandler = DataReceived; if ((message.Flag & MessageFlag.Inner) != 0) { //Inner message ProcInnerMessage(message); if ((message.Flag & MessageFlag.Sync) != 0) { //Sync message if (message.ReturnData == null) { message.ReturnData = new byte[0]; } InnerASendResponse((IPEndPoint)message.RemoteIPEndPoint, MessageFlag.Sync, message.Event, message.CableId, message.Channel, message.ReturnData); } } else if (receiveEventHandler != null) { receiveEventHandler(this, message); if ((message.Flag & MessageFlag.Sync) != 0) { //Sync message if (message.ReturnData == null) { message.ReturnData = new byte[0]; } InnerASendResponse((IPEndPoint)message.RemoteIPEndPoint, MessageFlag.Sync, message.Event, message.CableId, message.Channel, message.ReturnData); } } }