private void ReceivedPacket(Stream stream) { DataPacketBase dataPacketBase = null; BinaryReader br = null; try { br = new BinaryReader(stream, Encoding.UTF8); string packetType = br.ReadString(); dataPacketBase = GetDataPacketBase(packetType); if (dataPacketBase == null) { OnInvalidPacketReceived(); return; } } catch (Exception ex) { OnInvalidPacketReceived(); } if (dataPacketBase.Decoder(br) == true) { if (DataPacketReceived != null) { DataPacketReceived(this, dataPacketBase); } } }
private DataPacketBase CreateDataPack(Type dataPacketType) { ConstructorInfo constructor = dataPacketType.GetConstructor(Type.EmptyTypes); if (constructor == null) { throw new InvalidOperationException("数据包必须有默认构造函数。"); } DataPacketBase packet = constructor.Invoke(null) as DataPacketBase; return(packet); }
private DataPacketBase GetDataPacketBase(string packetType) { Type type = null; if (!dicType.TryGetValue(packetType, out type)) { return(null); } DataPacketBase dataPacketBase = CreateDataPack(type); dataPacketBase.PacketType = packetType; return(dataPacketBase); }
internal void Send(DataPacketBase pack) { try { this.Send(pack.Encoder()); } catch (Exception ex) { OnRaiseErrored(new RaiseErrorEvent() { ErrorMessage = ex.Message }); } }
public void Send(DataPacketBase e, IPEndPoint ipe) { service.SendToAsync(socketPool.Pop()); }