void Session_Data(RudpSession session, byte[] data) { IMStatus status = OpenStatus(session.UserID); G2Header root = new G2Header(data); if (G2Protocol.ReadPacket(root)) { if (root.Name == IMPacket.Message) { MessageData message = MessageData.Decode(root); if (message.TargetID != 0) { Debug.Assert(session.UserID == Core.UserID); if (session.UserID != Core.UserID) { return; } status = OpenStatus(message.TargetID); } ProcessMessage(status, new InstantMessage(Core, session, message)); } if (root.Name == IMPacket.Alive) { status.SetTTL(session.ClientID, SessionTimeout * 2); } } }