private static void FindZombieSessions(MessageData mdata, DWMessage packet) { var a = packet.ByteBuffer.ReadInt32(); // gametype var b = packet.ByteBuffer.ReadInt32(); // netcode version packet.ByteBuffer.ReadDataType(0x14); packet.ByteBuffer.ReadDataType(0x14); packet.ByteBuffer.ReadDataType(0x14); packet.ByteBuffer.ReadDataType(0x14); var g = packet.ByteBuffer.ReadInt32(); // playlist IEnumerable <KeyValuePair <ulong, bdMatchMakingInfo> > matchingSessions = new Dictionary <ulong, bdMatchMakingInfo>(); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)13); lock (_sessions) { matchingSessions = (from session in _sessions where session.Value.TitleID == TitleID.T5 && ((MatchMakingInfoT5)session.Value).NetcodeVersion == b && ((MatchMakingInfoT5)session.Value).GameType == a && ((MatchMakingInfoT5)session.Value).Playlist == g select session); reply.ByteBuffer.Write((uint)matchingSessions.Count()); reply.ByteBuffer.Write((uint)matchingSessions.Count()); foreach (var session in matchingSessions) { session.Value.Serialize(reply); } } reply.Send(true); Console.WriteLine("get zm g {0} a {1} returned {2} sessions", g, a, matchingSessions.Count()); }
public virtual void Deserialize(DWMessage packet) { Address = packet.ByteBuffer.ReadBlob(); //UnknownBlob = packet.ByteBuffer.ReadBlob(); Unknown1 = packet.ByteBuffer.ReadUInt32(); Unknown2 = packet.ByteBuffer.ReadUInt32(); //Unknown3 = packet.ByteBuffer.ReadUInt32(); byte[] addrbytes = new byte[4]; byte[] portbytes = new byte[2]; Array.ConstrainedCopy(Address, 0, addrbytes, 0, 4); Array.ConstrainedCopy(Address, 4, portbytes, 0, 2); InternalIPAddress = BitConverter.ToUInt32(addrbytes, 0); InternalPort = BitConverter.ToUInt16(portbytes, 0); addrbytes = new byte[4]; portbytes = new byte[2]; Array.ConstrainedCopy(Address, 18, addrbytes, 0, 4); Array.ConstrainedCopy(Address, 22, portbytes, 0, 2); IPAddress = BitConverter.ToUInt32(addrbytes, 0); Port = BitConverter.ToUInt16(portbytes, 0); if (addrbytes[0] == 0) { IPAddress = InternalIPAddress; Port = InternalPort; } }
private static void FindSessionFromID(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); IEnumerable <KeyValuePair <ulong, bdMatchMakingInfo> > matchingSessions = null; var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)13); lock (_sessions) { matchingSessions = (from session in _sessions where session.Key == sid select session).Take(1); reply.ByteBuffer.Write((uint)matchingSessions.Count()); reply.ByteBuffer.Write((uint)matchingSessions.Count()); foreach (var session in matchingSessions) { session.Value.Serialize(reply); } } reply.Send(true); Console.WriteLine("get id returned {0} sessions", matchingSessions.Count()); }
public override void Serialize(DWMessage packet) { base.Serialize(packet); packet.ByteBuffer.Write(NetcodeVersion); packet.ByteBuffer.WriteBlob(UnknownBlob2); packet.ByteBuffer.Write(HostName); packet.ByteBuffer.Write(UnknownLong1); packet.ByteBuffer.Write(MapName); packet.ByteBuffer.Write(GameType); packet.ByteBuffer.Write(Playlist); packet.ByteBuffer.Write(Unknown6); packet.ByteBuffer.Write(Unknown7); packet.ByteBuffer.Write(Unknown8); packet.ByteBuffer.Write(LicenseType); packet.ByteBuffer.Write(UnknownA); packet.ByteBuffer.Write(UnknownB); packet.ByteBuffer.Write(MaxPlayers); packet.ByteBuffer.Write(UnknownD); packet.ByteBuffer.Write(OnlineID); packet.ByteBuffer.Write(Wager); packet.ByteBuffer.Write(UnknownF); packet.ByteBuffer.Write(UnknownString3); packet.ByteBuffer.Write(UnknownLong3); packet.ByteBuffer.Write(StatDDL); }
private static void DeleteSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); lock (_sessions) { var matchingSessions = (from session in _sessions where session.Value.CID == mdata.Get <string>("cid") select session); var toRemove = new List <ulong>(); foreach (var session in matchingSessions) { toRemove.Add(session.Key); } foreach (var key in toRemove) { _sessions.Remove(key); } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
public override void Deserialize(DWMessage packet) { base.Deserialize(packet); NetcodeVersion = packet.ByteBuffer.ReadInt32(); UnknownBlob2 = packet.ByteBuffer.ReadBlob(); HostName = packet.ByteBuffer.ReadString(); UnknownLong1 = packet.ByteBuffer.ReadUInt64(); MapName = DetermineMapName(packet.ByteBuffer.ReadString()); GameType = packet.ByteBuffer.ReadInt32(); Playlist = packet.ByteBuffer.ReadInt32(); Unknown6 = packet.ByteBuffer.ReadInt32(); Unknown7 = packet.ByteBuffer.ReadInt32(); Unknown8 = packet.ByteBuffer.ReadInt32(); LicenseType = packet.ByteBuffer.ReadUInt32(); UnknownA = packet.ByteBuffer.ReadInt32(); UnknownB = packet.ByteBuffer.ReadInt32(); MaxPlayers = packet.ByteBuffer.ReadInt32(); UnknownD = packet.ByteBuffer.ReadInt32(); OnlineID = packet.ByteBuffer.ReadUInt64(); Wager = packet.ByteBuffer.ReadInt32(); UnknownF = packet.ByteBuffer.ReadInt32(); UnknownString3 = packet.ByteBuffer.ReadString(); UnknownLong3 = packet.ByteBuffer.ReadUInt64(); StatDDL = packet.ByteBuffer.ReadUInt32(); }
private static void GetCounterTotals(MessageData mdata, DWMessage packet) { try { var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000002); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)2); reply.ByteBuffer.Write((uint)100); reply.ByteBuffer.Write((uint)100); for (int i = 0; i < 100; i++) { var id = packet.ByteBuffer.ReadUInt32(); reply.ByteBuffer.Write(id); byte[] buffer = new byte[sizeof(Int64)]; // from internLabs DWServer, random number generator Random random = new Random(); random.NextBytes(buffer); long signed = BitConverter.ToInt64(buffer, 0); reply.ByteBuffer.Write((long)signed); // random number, mmk? //reply.ByteBuffer.Write((long)9223372036854775807); pffft /* from NN DWServer * //reply.ByteBuffer.Write((long)1337); * reply.ByteBuffer.Write((long)9223372036854775807); */ } reply.Send(true); } catch { } }
private static void GetGroupCounts(MessageData data, DWMessage packet) { packet.ByteBuffer.DataTypePackingEnabled = true; var a = packet.ByteBuffer.ReadByte(); // 108 var b = packet.ByteBuffer.ReadUInt32(); // count * 4 var count = packet.ByteBuffer.ReadUInt32(); var groups = new List <BsonValue>(); for (int i = 0; i < count; i++) { groups.Add((int)packet.ByteBuffer.ReadUInt32()); } var results = Database.AGroupUserCache.Find(Query.In("groupID", groups)); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)28); reply.ByteBuffer.Write((uint)results.Count()); reply.ByteBuffer.Write((uint)results.Count()); foreach (var result in results) { reply.ByteBuffer.Write((uint)result.groupID); reply.ByteBuffer.Write((uint)result.totalCount); } reply.Send(true); }
private static void FindSessionByIP(MessageData mdata, DWMessage packet, uint address, ushort port) { IEnumerable <KeyValuePair <ulong, bdMatchMakingInfo> > matchingSessions = null; var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)13); lock (_sessions) { matchingSessions = (from session in _sessions where (session.Value.TitleID == TitleID.T5 && session.Value.IPAddress == address && session.Value.Port == port) || (mdata.Get <IPEndPoint>("source").Address.Address == session.Value.IPAddress && session.Value.InternalIPAddress == address && session.Value.InternalPort == port) select session).Take(1); reply.ByteBuffer.Write((uint)matchingSessions.Count()); reply.ByteBuffer.Write((uint)matchingSessions.Count()); foreach (var session in matchingSessions) { session.Value.Serialize(reply); } } reply.Send(true); Console.WriteLine("get ip {0} returned {1} sessions", address, matchingSessions.Count()); }
private static void CreateSession(MessageData mdata, DWMessage packet) { Net_TcpDisconnected(mdata); var seed = 0; string IP = mdata.Get <string>("cid"); string[] IPParts = IP.Split(':'); seed = BitConverter.ToInt32(IPAddress.Parse(IPParts[0]).GetAddressBytes(), 0); TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); seed += (int)ts.TotalSeconds; var rnd = new Random(seed); var sid = new byte[8]; rnd.NextBytes(sid); var titleID = DWRouter.GetTitleIDForData(mdata); bdMatchMakingInfo info = null; if (titleID == TitleID.T5) { info = new MatchMakingInfoT5(); } else if (titleID == TitleID.IW5) { info = new MatchMakingInfoIW5(); } info.Deserialize(packet); info.SessionID = sid; info.CID = mdata.Get <string>("cid"); info.User = (DWRouter.CIDToUser.ContainsKey(info.CID)) ? DWRouter.CIDToUser[info.CID] : 0; info.Reachable = true; lock (_sessions) { _sessions.Add(BitConverter.ToUInt64(sid, 0), info); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(info.SessionID); reply.Send(true); if (titleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug(tInfo.OnlineID.ToString("X16") + " registered session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (titleID == TitleID.IW5) { Log.Debug("Registered session."); } }
public static void Unknown(MessageData data, DWMessage packet) { var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)2); reply.Send(true); }
public virtual void Serialize(DWMessage packet) { packet.ByteBuffer.WriteBlob(Address); packet.ByteBuffer.WriteBlob(SessionID); packet.ByteBuffer.Write(Unknown1); packet.ByteBuffer.Write(Unknown2); packet.ByteBuffer.Write(Players); }
public void Deserialize(DWMessage packet) { if (Program.Game == TitleID.T5) { UnknownInt = packet.ByteBuffer.ReadInt32(); } ProfileData = packet.ByteBuffer.ReadBlob(); }
private static void UpdateSessionPlayers(MessageData mdata, DWMessage packet) { try { var sidBlob = packet.ByteBuffer.ReadBlob(); var players = packet.ByteBuffer.ReadUInt32(); var sid = BitConverter.ToUInt64(sidBlob, 0); var success = false; if (_sessions.ContainsKey(sid)) { MatchMakingInfoT5 info; lock (_sessions) { info = _sessions[sid]; info.Deserialize(packet); info.Players = players; info.LastTouched = DateTime.Now; _sessions[sid] = info; } success = true; if (info.TitleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug("Updated session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (info.TitleID == TitleID.IW5) { Log.Debug("Updated session"); } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); if (success) { reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)12); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(sidBlob); } else { reply.ByteBuffer.Write((uint)2); } reply.Send(true); } catch { } }
private static void GetPerformanceValues(MessageData mdata, DWMessage packet) { var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)21); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
public void Serialize(DWMessage packet) { packet.ByteBuffer.Write(UserID); if (Program.Game == TitleID.T5) { packet.ByteBuffer.Write(UnknownInt); } packet.ByteBuffer.WriteBlob(ProfileData); }
private static void GetServerTime(MessageData data, DWMessage packet) { var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000000); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)6); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write(DateTime.UtcNow.ToUnixTime()); reply.Send(true); }
private static void GetPublisherFile(MessageData mdata, DWMessage packet) { try { var filename = packet.ByteBuffer.ReadString(); filename = "data/" + filename.Replace("\\", "/").Replace("/", ""); Log.Debug("Trying to send " + filename); //var data = File.ReadAllBytes(@"data/pub/" + filename); if (!_defaultFiles.ContainsKey(filename)) { FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read); int offset = 0; byte[] data = new byte[fileStream.Length]; int remaining = (int)fileStream.Length; while (remaining > 0) { int read = fileStream.Read(data, offset, remaining); if (read <= 0) { throw new EndOfStreamException (String.Format("End of stream reached with {0} bytes left to read", remaining)); } remaining -= read; offset += read; } fileStream.Close(); fileStream.Dispose(); _defaultFiles.Add(filename, data); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)7); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(_defaultFiles[filename]); reply.Send(true); } catch (Exception e) { Log.Debug(e.ToString()); } }
private static void SendGlobalInstantMessage(MessageData mdata, DWMessage packet) { var bdOnlineID = packet.ByteBuffer.ReadUInt64(); var data = packet.ByteBuffer.ReadBlob(); // route the message to the target user if (DWRouter.Connections.ContainsKey(bdOnlineID)) { try { //var ourID = (from conn in DWRouter.Connections // where conn.Value == mdata.Get<string>("cid") // select conn.Key).FirstOrDefault(); var ourID = DWRouter.GetIDForData(mdata); var cid = DWRouter.Connections[bdOnlineID]; var treply = packet.MakeReply(2, false, cid); // 2 is 'push message' treply.ByteBuffer.Write((uint)21); treply.ByteBuffer.Write(ourID); treply.ByteBuffer.Write("someone"); treply.ByteBuffer.WriteBlob(data); treply.Send(true); Log.Verbose("sent an instant message to " + bdOnlineID.ToString("X16") + " from " + ourID.ToString("X16")); } catch { var reply2 = packet.MakeReply(1, false); reply2.ByteBuffer.Write(0x8000000000000001); reply2.ByteBuffer.Write((uint)0); reply2.ByteBuffer.Write((byte)14); reply2.ByteBuffer.Write((uint)0); reply2.ByteBuffer.Write((uint)0); reply2.Send(true); return; } } // note: we shouldn't force success, but there's no clear error list yet var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)14); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void UpdateSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); var titleID = DWRouter.GetTitleIDForData(mdata); MatchMakingInfoT5 info = null; if (titleID == TitleID.T5) { info = new MatchMakingInfoT5(); } else if (titleID == TitleID.IW5) { //info = new MatchMakingInfoIW5(); } info.Deserialize(packet); info.SessionID = sidBlob; info.CID = mdata.Get <string>("cid"); info.User = (DWRouter.CIDToUser.ContainsKey(info.CID)) ? DWRouter.CIDToUser[info.CID] : 0; info.Reachable = true; info.LastTouched = DateTime.Now; _sessions[sid] = info; if (titleID == TitleID.T5) { var tInfo = (MatchMakingInfoT5)info; Log.Debug(tInfo.OnlineID.ToString("X16") + " updated session (map " + tInfo.MapName + ", gametype " + tInfo.GameTypeName + ")"); } else if (titleID == TitleID.IW5) { Log.Debug("Updated session."); } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void InviteToSession(MessageData mdata, DWMessage packet) { var sidBlob = packet.ByteBuffer.ReadBlob(); var sid = BitConverter.ToUInt64(sidBlob, 0); var attachment = packet.ByteBuffer.ReadBlob(); var onlineIDs = new List <ulong>(); while (packet.ByteBuffer.PeekByte() == 10) { onlineIDs.Add(packet.ByteBuffer.ReadUInt64()); } foreach (var onlineID in onlineIDs) { try { var ourID = DWRouter.GetIDForData(mdata); var ourName = DWRouter.CIDToName[mdata.Get <string>("cid")]; var theirID = DWRouter.Connections[onlineID]; var treply = packet.MakeReply(2, false, theirID); // 2 is 'push message' treply.ByteBuffer.Write((uint)6); treply.ByteBuffer.Write(ourID); treply.ByteBuffer.Write(ourName); treply.ByteBuffer.WriteBlob(sidBlob); treply.ByteBuffer.WriteBlob(attachment); treply.Send(true); Log.Debug("sent an invite to " + onlineID.ToString("X16") + " from " + ourID.ToString("X16")); } catch (Exception) { } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)21); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void GetPublicInfos(MessageData data, DWMessage packet) { var entityIDs = new List <BsonInt32>(); while (packet.ByteBuffer.PeekByte() == 10) { entityIDs.Add((int)(packet.ByteBuffer.ReadUInt64() & 0xFFFFFFFF)); } var profileInfos = new List <PublicProfileInfo>(); var query = Query.In("user_id", entityIDs); var profiles = Database.APublicProfile.Find(query); if (profiles.Count() > 0) { foreach (var profile in profiles) { profileInfos.Add(new PublicProfileInfo() { UserID = (ulong)(0x110000100000000 | (uint)profile.user_id), UnknownInt = profile.profile_int, ProfileData = profile.profile_blob }); } } var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)8); reply.ByteBuffer.Write((uint)profileInfos.Count()); reply.ByteBuffer.Write((uint)profileInfos.Count()); foreach (var info in profileInfos) { info.Serialize(reply); } reply.Send(true); }
private static void UnknownHandler(MessageData mdata, DWMessage packet) { string ukblob2 = ""; { for (int i = 0; i < packet.Buffer.Length; i++) { ukblob2 = ukblob2 + packet.Buffer[i].ToString("X2"); } } Log.Debug(ukblob2); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)1); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void SetPublicInfo(MessageData data, DWMessage packet) { var profileInfo = new PublicProfileInfo(); profileInfo.Deserialize(packet); /*ulong user = 0; * lock (DWRouter.Connections) * { * user = (from conn in DWRouter.Connections * where conn.Value == data.Get<string>("cid") * select conn.Key).FirstOrDefault(); * }*/ ulong user = DWRouter.GetIDForData(data); var existing = Database.APublicProfile.Find(Query.EQ("user_id", (int)(user & 0xFFFFFFFF))); var item = new PublicProfile(); if (existing.Count() > 0) { item = existing.First(); } item.user_id = (int)(user & 0xFFFFFFFF); item.profile_int = profileInfo.UnknownInt; item.profile_blob = profileInfo.ProfileData; item.blobsize = profileInfo.ProfileData.Length; Database.APublicProfile.Save(item); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)8); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
private static void GetUserData(MessageData mdata, DWMessage packet) { var ip = mdata.Get <string>("cid").Split(':')[0]; var location = _geoIP.getLocation(ip); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)8); reply.ByteBuffer.Write(1); reply.ByteBuffer.Write(1); reply.ByteBuffer.Write(location.countryCode ?? ""); reply.ByteBuffer.Write(location.countryName ?? ""); reply.ByteBuffer.Write(location.regionName ?? ""); reply.ByteBuffer.Write(location.city ?? ""); reply.ByteBuffer.Write((float)location.latitude); reply.ByteBuffer.Write((float)location.longitude); reply.Send(true); }
public override void Serialize(DWMessage packet) { base.Serialize(packet); packet.ByteBuffer.Write(Unknown1); packet.ByteBuffer.Write(Playlist); packet.ByteBuffer.Write(PlaylistVersion); packet.ByteBuffer.Write(Unknown4); packet.ByteBuffer.Write(Unknown5); packet.ByteBuffer.Write(Unknown6); packet.ByteBuffer.Write(Unknown7); packet.ByteBuffer.Write(Unknown8); packet.ByteBuffer.Write(Unknown9); packet.ByteBuffer.Write(UnknownA); packet.ByteBuffer.Write(UnknownB); packet.ByteBuffer.WriteBlob(UnknownBlob); packet.ByteBuffer.Write(UnknownC); packet.ByteBuffer.Write(UnknownUInt1); packet.ByteBuffer.Write(UnknownUInt2); packet.ByteBuffer.Write(UnknownFloat1); packet.ByteBuffer.Write(UnknownFloat2); packet.ByteBuffer.Write(UnknownD); packet.ByteBuffer.Write(UnknownE); packet.ByteBuffer.Write(UnknownF); packet.ByteBuffer.Write(UnknownG); packet.ByteBuffer.Write(UnknownH); packet.ByteBuffer.Write(UnknownI); packet.ByteBuffer.Write(UnknownJ); packet.ByteBuffer.Write(UnknownK); packet.ByteBuffer.Write(UnknownL); packet.ByteBuffer.Write(UnknownM); packet.ByteBuffer.Write(UnknownN); packet.ByteBuffer.Write(UnknownO); packet.ByteBuffer.Write(UnknownP); packet.ByteBuffer.Write(UnknownQ); packet.ByteBuffer.Write(UnknownR); packet.ByteBuffer.Write(UnknownS); packet.ByteBuffer.Write(UnknownUInt64); }
private static void SetGroups(MessageData data, DWMessage packet) { ulong userID = DWRouter.GetIDForData(data); /*lock (DWRouter.Connections) * { * userID = (from conn in DWRouter.Connections * where conn.Value == data.Get<string>("cid") * select conn.Key).FirstOrDefault(); * }*/ RemoveUserGroups(userID); packet.ByteBuffer.DataTypePackingEnabled = true; var a = packet.ByteBuffer.ReadByte(); // 108 var b = packet.ByteBuffer.ReadUInt32(); // count * 4 var count = packet.ByteBuffer.ReadUInt32(); var groups = new List <GroupUser>(); for (int i = 0; i < count; i++) { groups.Add(new GroupUser() { groupID = (int)packet.ByteBuffer.ReadUInt32(), userID = (long)userID }); } Database.AGroupUser.InsertBatch(groups); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)28); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((uint)0); reply.Send(true); }
public override void Deserialize(DWMessage packet) { base.Deserialize(packet); Unknown1 = packet.ByteBuffer.ReadInt32(); Playlist = packet.ByteBuffer.ReadInt32(); PlaylistVersion = packet.ByteBuffer.ReadInt32(); Unknown4 = packet.ByteBuffer.ReadInt32(); Unknown5 = packet.ByteBuffer.ReadInt32(); Unknown6 = packet.ByteBuffer.ReadInt32(); Unknown7 = packet.ByteBuffer.ReadInt32(); Unknown8 = packet.ByteBuffer.ReadInt32(); Unknown9 = packet.ByteBuffer.ReadInt32(); UnknownA = packet.ByteBuffer.ReadInt32(); UnknownB = packet.ByteBuffer.ReadInt32(); UnknownBlob = packet.ByteBuffer.ReadBlob(); UnknownC = packet.ByteBuffer.ReadInt32(); UnknownUInt1 = packet.ByteBuffer.ReadUInt32(); UnknownUInt2 = packet.ByteBuffer.ReadUInt32(); UnknownFloat1 = packet.ByteBuffer.ReadFloat(); UnknownFloat2 = packet.ByteBuffer.ReadFloat(); UnknownD = packet.ByteBuffer.ReadInt32(); UnknownE = packet.ByteBuffer.ReadInt32(); UnknownF = packet.ByteBuffer.ReadInt32(); UnknownG = packet.ByteBuffer.ReadInt32(); UnknownH = packet.ByteBuffer.ReadInt32(); UnknownI = packet.ByteBuffer.ReadInt32(); UnknownJ = packet.ByteBuffer.ReadInt32(); UnknownK = packet.ByteBuffer.ReadInt32(); UnknownL = packet.ByteBuffer.ReadInt32(); UnknownM = packet.ByteBuffer.ReadInt32(); UnknownN = packet.ByteBuffer.ReadInt32(); UnknownO = packet.ByteBuffer.ReadInt32(); UnknownP = packet.ByteBuffer.ReadInt32(); UnknownQ = packet.ByteBuffer.ReadInt32(); UnknownR = packet.ByteBuffer.ReadInt32(); UnknownS = packet.ByteBuffer.ReadInt32(); UnknownUInt64 = packet.ByteBuffer.ReadUInt64(); }
private static void GetFile(MessageData mdata, DWMessage packet) { var filename = packet.ByteBuffer.ReadString(); var user = packet.ByteBuffer.ReadUInt64(); if (user == 0) { user = DWRouter.GetIDForData(mdata); } var path = filename + "_" + user.ToString("x16"); var e = r.Next(1, 164); Log.Debug("Trying to send " + path + "... (originID " + e + ")"); var query = Query.EQ("filename", path); var files = Database.AFiles.Find(query); if (files.Count() > 0) { var file = files.First(); var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)7); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.Write((uint)1); reply.ByteBuffer.WriteBlob(file.data); reply.Send(true); } else { var reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0x3E8); reply.Send(true); } }
private static void FindSessionsByEntityIDs(MessageData mdata, DWMessage packet) { var entityIDs = new List <ulong>(); while (packet.ByteBuffer.PeekByte() == 10) { entityIDs.Add(packet.ByteBuffer.ReadUInt64()); } DWMessage reply; IEnumerable <KeyValuePair <ulong, MatchMakingInfoT5> > matchingSessions = new Dictionary <ulong, MatchMakingInfoT5>(); reply = packet.MakeReply(1, false); reply.ByteBuffer.Write(0x8000000000000001); reply.ByteBuffer.Write((uint)0); reply.ByteBuffer.Write((byte)14); lock (_sessions) { matchingSessions = (from session in _sessions where ( session.Value.TitleID == TitleID.T5 && entityIDs.Contains(((MatchMakingInfoT5)session.Value).OnlineID) && (DateTime.Now - ((MatchMakingInfoT5)session.Value).LastTouched).TotalSeconds < 120 ) select session); reply.ByteBuffer.Write((uint)matchingSessions.Count()); reply.ByteBuffer.Write((uint)matchingSessions.Count()); foreach (var session in matchingSessions) { session.Value.Serialize(reply); } } reply.Send(true); Console.WriteLine("returned {0} sessions", matchingSessions.Count()); }