private void HandleNatIntroductionRequest(NetEndPoint senderEndPoint, NetDataReader dr) { NetEndPoint localEp = dr.GetNetEndPoint(); string token = dr.GetString(MaxTokenLength); lock (_requestEvents) { _requestEvents.Enqueue(new RequestEventData { LocalEndPoint = localEp, RemoteEndPoint = senderEndPoint, Token = token }); } }
private void HandleNatIntroduction(NetDataReader dr) { // read intro byte hostByte = dr.GetByte(); NetEndPoint remoteInternal = dr.GetNetEndPoint(); NetEndPoint remoteExternal = dr.GetNetEndPoint(); string token = dr.GetString(MaxTokenLength); NetUtils.DebugWrite(ConsoleColor.Cyan, "[NAT] introduction received; we are designated " + (hostByte == HostByte ? "host" : "client")); NetDataWriter writer = new NetDataWriter(); // send internal punch writer.Put(hostByte); writer.Put(token); _netBase.SendRaw(NetPacket.CreateRawPacket(PacketProperty.NatPunchMessage, writer), remoteInternal); NetUtils.DebugWrite(ConsoleColor.Cyan, "[NAT] internal punch sent to " + remoteInternal); // send external punch writer.Reset(); writer.Put(hostByte); writer.Put(token); _netBase.SendRaw(NetPacket.CreateRawPacket(PacketProperty.NatPunchMessage, writer), remoteExternal); NetUtils.DebugWrite(ConsoleColor.Cyan, "[NAT] external punch sent to " + remoteExternal); }
public static SkirmishSlot Deserialize(NetDataReader reader) { var slot = new SkirmishSlot(reader.GetInt()) { State = (SkirmishSlotState)reader.GetByte(), ColorIndex = reader.GetSByte(), FactionIndex = reader.GetByte(), Team = reader.GetSByte(), StartPosition = reader.GetByte(), }; if (slot.State == SkirmishSlotState.Human) { slot.ClientId = reader.GetString(); slot.PlayerName = reader.GetString(); slot.EndPoint = reader.GetNetEndPoint(); } return(slot); }
public static SkirmishSlot Deserialize(NetDataReader reader) { var slot = new SkirmishSlot() { Index = reader.GetInt(), State = (SkirmishSlotState)reader.GetByte(), PlayerName = reader.GetString(), ColorIndex = reader.GetByte(), FactionIndex = reader.GetByte(), Team = reader.GetByte(), Ready = reader.GetBool() }; if (slot.State == SkirmishSlotState.Human) { slot.EndPoint = reader.GetNetEndPoint(); slot.ProcessId = reader.GetInt(); } return(slot); }
private static object GetObject(this NetDataReader reader, Type type) { if (type == null) { return(null); } if (type.GetInterface("INetSerializable") != null) { var result = (INetSerializable)Activator.CreateInstance(type); result.Deserialize(reader); return(result); } else if (type.GetInterface("ISyncObject") != null) { return(reader.GetByte()); } else if (type.IsEnum) { return(Enum.Parse(type, type.GetEnumName(reader.GetObject(type.GetEnumUnderlyingType())))); } else if (type == typeof(bool)) { return(reader.GetBool()); } else if (type == typeof(byte)) { return(reader.GetByte()); } else if (type == typeof(sbyte)) { return(reader.GetSByte()); } else if (type == typeof(char)) { return(reader.GetChar()); } else if (type == typeof(short)) { return(reader.GetShort()); } else if (type == typeof(ushort)) { return(reader.GetUShort()); } else if (type == typeof(int)) { return(reader.GetInt()); } else if (type == typeof(uint)) { return(reader.GetUInt()); } else if (type == typeof(long)) { return(reader.GetLong()); } else if (type == typeof(ulong)) { return(reader.GetULong()); } else if (type == typeof(float)) { return(reader.GetFloat()); } else if (type == typeof(double)) { return(reader.GetBool()); } else if (type == typeof(string)) { return(reader.GetDouble()); } else if (type == typeof(IPEndPoint)) { return(reader.GetNetEndPoint()); } else { throw new Exception("Unable to deserialize object of type " + type); } }
private void HandleNatIntroduction(NetDataReader dr) { // read intro byte hostByte = dr.GetByte(); IPEndPoint remoteInternal = dr.GetNetEndPoint(); IPEndPoint remoteExternal = dr.GetNetEndPoint(); string token = dr.GetString(MaxTokenLength); IPEndPoint internetExternal = dr.GetNetEndPoint(); NetDebug.Write(NetLogLevel.Trace, "[NAT] introduction received; we are designated " + (hostByte == HostByte ? "host" : "client")); NetDataWriter writer = new NetDataWriter(); // send internal punch writer.Put((byte)PacketProperty.NatPunchMessage); writer.Put(hostByte); writer.Put(token); SocketError errorCode = 0; _socket.SendTo(writer.Data, 0, writer.Length, remoteInternal, ref errorCode); NetDebug.Write(NetLogLevel.Trace, "[NAT] internal punch sent to " + remoteInternal); // send external punch writer.Reset(); writer.Put((byte)PacketProperty.NatPunchMessage); writer.Put(hostByte); writer.Put(token); if (hostByte == HostByte) { _socket.Ttl = NetConstants.NatPunchHostSocketTTL; _socket.SendTo(writer.Data, 0, writer.Length, remoteExternal, ref errorCode); _socket.Ttl = NetConstants.SocketTTL; } else { _socket.SendTo(writer.Data, 0, writer.Length, remoteExternal, ref errorCode); } NetDebug.Write(NetLogLevel.Trace, "[NAT] external punch sent to " + remoteExternal); // send internet punch if different if (!internetExternal.Address.Equals(remoteExternal.Address)) { // update internet port to remote internetExternal.Port = remoteExternal.Port; writer.Reset(); writer.Put((byte)PacketProperty.NatPunchMessage); writer.Put(hostByte); writer.Put(token); if (hostByte == HostByte) { _socket.Ttl = NetConstants.NatPunchHostSocketTTL; _socket.SendTo(writer.Data, 0, writer.Length, internetExternal, ref errorCode); _socket.Ttl = NetConstants.SocketTTL; } else { _socket.SendTo(writer.Data, 0, writer.Length, internetExternal, ref errorCode); } NetDebug.Write(NetLogLevel.Trace, "[NAT] internet punch sent to " + internetExternal); } }