protected override Task<int> Send(UdpMessage message) { if (Logger.IsDebugEnabled) { Logger.Debug(string.Format("SEND {0}, PacketType {1}, Size {2}", message.RemoteEndPoint, message.PacketType, message.Message.Count())); } return base.Send(message); }
public static UdpMessage ToUdpMessage(this byte[] message, IPEndPoint endPoint) { using (var stream = new MemoryStream(message)) { using (var binaryReader = new BinaryReader(stream)) { var udpMsg = new UdpMessage(endPoint) { Message = message, PacketType = binaryReader.ReadByte(), Flags = binaryReader.ReadByte(), Session = binaryReader.ReadUInt16(), Key = binaryReader.ReadUInt16() }; return udpMsg; } } }
protected virtual Task<int> Send(UdpMessage message) { return UdpClient.SendAsync(message.Message, message.Message.Length, message.RemoteEndPoint); }
private void ProcessGameInfoResponse(UdpMessage message) { var gameInfo = message as GameInfoResponse; Logger.Info(string.Format("{0} GameInfo", gameInfo.RemoteEndPoint)); if (serverList.ContainsKey(gameInfo.RemoteEndPoint)) { serverList[gameInfo.RemoteEndPoint] = gameInfo.ServerInfo; } else { serverList.Add(gameInfo.RemoteEndPoint, gameInfo.ServerInfo); } }
private void ProcessServerListRequest(UdpMessage message) { Logger.Info(string.Format("{0} ServerList", message.RemoteEndPoint)); //query server list and send results back var session = SessionHandler.GetSession(message.RemoteEndPoint); if (serverList.Any()) { var total = (ushort)serverList.Count; ushort packetIndex = 0; serverList.Values.ToList().ForEach(serverInfo => { var serverListResponse = new ServerListResponse(message.RemoteEndPoint); serverListResponse.AddSession(session); serverListResponse.PacketIndex = ++ packetIndex; serverListResponse.TotalPackets = total; serverListResponse.Message = serverListResponse.WriteUdpMessage().Concat(serverInfo.WriteUdpMessage()).ToArray(); Send(serverListResponse); }); } else { var serverListResponse = new ServerListResponse(message.RemoteEndPoint); serverListResponse.AddSession(session); serverListResponse.PacketIndex = 1; serverListResponse.TotalPackets = 1; serverListResponse.Message = serverListResponse.WriteUdpMessage(); Send(serverListResponse); } }
private void ProcessHeartbeat(UdpMessage message) { var heartbeat = message as GameHeartbeat; Logger.Info(string.Format("{0} Heartbeat", heartbeat.RemoteEndPoint)); if (SessionHandler.Heartbeat(heartbeat.RemoteEndPoint)) { var session = SessionHandler.GetSession(heartbeat.RemoteEndPoint); //send game info request var gameInfoReq = new GameInfoRequest(heartbeat.RemoteEndPoint ); gameInfoReq.AddSession(session); gameInfoReq.Message = gameInfoReq.WriteUdpMessage(); Send(gameInfoReq); } }