diff --git a/libnpsharp.sln.DotSettings b/libnpsharp.sln.DotSettings
index 5b44f2a..300f99b 100644
--- a/libnpsharp.sln.DotSettings
+++ b/libnpsharp.sln.DotSettings
@@ -1,4 +1,5 @@
+ ID
NP
NPID
RPC
\ No newline at end of file
diff --git a/src/libnpsharp/NPClient.cs b/src/libnpsharp/NPClient.cs
index d042bfc..63d40d4 100644
--- a/src/libnpsharp/NPClient.cs
+++ b/src/libnpsharp/NPClient.cs
@@ -6,7 +6,7 @@ using System.Threading;
using System.Threading.Tasks;
using log4net;
using NPSharp.RPC;
-using NPSharp.RPC.Packets;
+using NPSharp.RPC.Messages;
namespace NPSharp
{
@@ -88,7 +88,7 @@ namespace NPSharp
_log.Debug("Disconnect() start");
_cancellationTokenSource.Cancel(true); // TODO: Find a cleaner way to cancel _processingTask (focus: _rpc.Read)
- _procTask.Wait(_cancellationToken);
+ //_procTask.Wait(_cancellationToken);
_rpc.Close();
LoginId = 0;
diff --git a/src/libnpsharp/RPC/Packets/AuthenticateExternalStatusMessage.cs b/src/libnpsharp/RPC/Messages/AuthenticateExternalStatusMessage.cs
similarity index 55%
rename from src/libnpsharp/RPC/Packets/AuthenticateExternalStatusMessage.cs
rename to src/libnpsharp/RPC/Messages/AuthenticateExternalStatusMessage.cs
index 78f2f56..c3d7c70 100644
--- a/src/libnpsharp/RPC/Packets/AuthenticateExternalStatusMessage.cs
+++ b/src/libnpsharp/RPC/Messages/AuthenticateExternalStatusMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1006)]
[ProtoContract]
- class AuthenticateExternalStatusMessage : RPCServerMessage
+ public sealed class AuthenticateExternalStatusMessage : RPCServerMessage
{
[ProtoMember(1)]
public int Status { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/AuthenticateResultMessage.cs b/src/libnpsharp/RPC/Messages/AuthenticateResultMessage.cs
similarity index 73%
rename from src/libnpsharp/RPC/Packets/AuthenticateResultMessage.cs
rename to src/libnpsharp/RPC/Messages/AuthenticateResultMessage.cs
index 42cb81c..b089216 100644
--- a/src/libnpsharp/RPC/Packets/AuthenticateResultMessage.cs
+++ b/src/libnpsharp/RPC/Messages/AuthenticateResultMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1010)]
[ProtoContract]
- class AuthenticateResultMessage : RPCServerMessage
+ public sealed class AuthenticateResultMessage : RPCServerMessage
{
[ProtoMember(1)]
public int Result { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/AuthenticateWithTokenMessage.cs b/src/libnpsharp/RPC/Messages/AuthenticateWithTokenMessage.cs
similarity index 57%
rename from src/libnpsharp/RPC/Packets/AuthenticateWithTokenMessage.cs
rename to src/libnpsharp/RPC/Messages/AuthenticateWithTokenMessage.cs
index eff3199..58c5e9f 100644
--- a/src/libnpsharp/RPC/Packets/AuthenticateWithTokenMessage.cs
+++ b/src/libnpsharp/RPC/Messages/AuthenticateWithTokenMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1003)]
[ProtoContract]
- class AuthenticateWithTokenMessage : RPCClientMessage
+ public sealed class AuthenticateWithTokenMessage : RPCClientMessage
{
[ProtoMember(1)]
public string Token { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/CloseAppMessage.cs b/src/libnpsharp/RPC/Messages/CloseAppMessage.cs
similarity index 60%
rename from src/libnpsharp/RPC/Packets/CloseAppMessage.cs
rename to src/libnpsharp/RPC/Messages/CloseAppMessage.cs
index 2dd2710..c4a4524 100644
--- a/src/libnpsharp/RPC/Packets/CloseAppMessage.cs
+++ b/src/libnpsharp/RPC/Messages/CloseAppMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(2001)]
[ProtoContract]
- class CloseAppMessage : RPCServerMessage
+ public sealed class CloseAppMessage : RPCServerMessage
{
[ProtoMember(1)]
public string Reason { get; set; }
diff --git a/src/libnpsharp/RPC/Messages/FriendDetails.cs b/src/libnpsharp/RPC/Messages/FriendDetails.cs
new file mode 100644
index 0000000..b427869
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendDetails.cs
@@ -0,0 +1,17 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ public sealed class FriendDetails
+ {
+ internal FriendDetails() { }
+
+ [ProtoMember(1)]
+ public UInt64 NPID { get; set; }
+
+ [ProtoMember(2)]
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsGetProfileDataMessage.cs b/src/libnpsharp/RPC/Messages/FriendsGetProfileDataMessage.cs
new file mode 100644
index 0000000..032236c
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsGetProfileDataMessage.cs
@@ -0,0 +1,16 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1202)]
+ public sealed class FriendsGetProfileDataMessage : RPCClientMessage
+ {
+ [ProtoMember(1)]
+ public UInt64[] IDs { get; set; }
+
+ [ProtoMember(2)]
+ public string ProfileType { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsGetProfileDataResultMessage.cs b/src/libnpsharp/RPC/Messages/FriendsGetProfileDataResultMessage.cs
new file mode 100644
index 0000000..1150276
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsGetProfileDataResultMessage.cs
@@ -0,0 +1,12 @@
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1203)]
+ public sealed class FriendsGetProfileDataResultMessage : RPCServerMessage
+ {
+ [ProtoMember(1)]
+ public ProfileDataResult[] Results { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarMessage.cs b/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarMessage.cs
new file mode 100644
index 0000000..0b27a08
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarMessage.cs
@@ -0,0 +1,13 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1214)]
+ public sealed class FriendsGetUserAvatarMessage : RPCClientMessage
+ {
+ [ProtoMember(1)]
+ public Int32 Guid { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarResultMessage.cs b/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarResultMessage.cs
new file mode 100644
index 0000000..721f10b
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsGetUserAvatarResultMessage.cs
@@ -0,0 +1,20 @@
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1215)]
+ public sealed class FriendsGetUserAvatarResultMessage : RPCServerMessage
+ {
+ internal FriendsGetUserAvatarResultMessage() { }
+
+ [ProtoMember(1)]
+ public int Result { get; internal set; }
+
+ [ProtoMember(2)]
+ public int Guid { get; internal set; }
+
+ [ProtoMember(3)]
+ public byte[] FileData { get; internal set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsPresence.cs b/src/libnpsharp/RPC/Messages/FriendsPresence.cs
new file mode 100644
index 0000000..bc6f5c6
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsPresence.cs
@@ -0,0 +1,18 @@
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ public sealed class FriendsPresence
+ {
+ internal FriendsPresence()
+ {
+ }
+
+ [ProtoMember(1)]
+ public string Key { get; set; }
+
+ [ProtoMember(2)]
+ public string Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsPresenceMessage.cs b/src/libnpsharp/RPC/Messages/FriendsPresenceMessage.cs
new file mode 100644
index 0000000..e37975e
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsPresenceMessage.cs
@@ -0,0 +1,26 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1212)]
+ public sealed class FriendsPresenceMessage
+ {
+ internal FriendsPresenceMessage()
+ {
+ }
+
+ [ProtoMember(1)]
+ public UInt64 Friend { get; internal set; }
+
+ [ProtoMember(2)]
+ public Int32 PresenceState { get; internal set; }
+
+ [ProtoMember(3)]
+ public UInt64 CurrentServer { get; internal set; }
+
+ [ProtoMember(4)]
+ public FriendsPresence[] Presence { get; internal set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsRosterMessage.cs b/src/libnpsharp/RPC/Messages/FriendsRosterMessage.cs
new file mode 100644
index 0000000..4aaeb8c
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsRosterMessage.cs
@@ -0,0 +1,14 @@
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1211)]
+ public sealed class FriendsRosterMessage : RPCServerMessage
+ {
+ internal FriendsRosterMessage() { }
+
+ [ProtoMember(1)]
+ public FriendDetails[] Friends { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsSetPresenceMessage.cs b/src/libnpsharp/RPC/Messages/FriendsSetPresenceMessage.cs
new file mode 100644
index 0000000..1f30973
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsSetPresenceMessage.cs
@@ -0,0 +1,12 @@
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1213)]
+ public sealed class FriendsSetPresenceMessage : RPCClientMessage
+ {
+ [ProtoMember(1)]
+ public FriendsPresence[] Presence { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/FriendsSetSteamIDMessage.cs b/src/libnpsharp/RPC/Messages/FriendsSetSteamIDMessage.cs
new file mode 100644
index 0000000..7456a27
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/FriendsSetSteamIDMessage.cs
@@ -0,0 +1,13 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ [Packet(1201)]
+ public sealed class FriendsSetSteamIDMessage : RPCClientMessage
+ {
+ [ProtoMember(1)]
+ public UInt64 SteamID { get; set; }
+ }
+}
diff --git a/src/libnpsharp/RPC/Packets/HelloMessage.cs b/src/libnpsharp/RPC/Messages/HelloMessage.cs
similarity index 83%
rename from src/libnpsharp/RPC/Packets/HelloMessage.cs
rename to src/libnpsharp/RPC/Messages/HelloMessage.cs
index 42cb333..03ab464 100644
--- a/src/libnpsharp/RPC/Packets/HelloMessage.cs
+++ b/src/libnpsharp/RPC/Messages/HelloMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1000)]
[ProtoContract]
- class HelloMessage : RPCServerMessage
+ public sealed class HelloMessage : RPCServerMessage
{
// I seriously have no idea where in the code this is used but whatever
[ProtoMember(1)]
diff --git a/src/libnpsharp/RPC/Packets/MessagingSendDataMessage.cs b/src/libnpsharp/RPC/Messages/MessagingSendDataMessage.cs
similarity index 66%
rename from src/libnpsharp/RPC/Packets/MessagingSendDataMessage.cs
rename to src/libnpsharp/RPC/Messages/MessagingSendDataMessage.cs
index 360787c..5b1be59 100644
--- a/src/libnpsharp/RPC/Packets/MessagingSendDataMessage.cs
+++ b/src/libnpsharp/RPC/Messages/MessagingSendDataMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(2002)]
[ProtoContract]
- class MessagingSendDataMessage : RPCClientMessage
+ public sealed class MessagingSendDataMessage : RPCClientMessage
{
[ProtoMember(1)]
public ulong NPID { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/PacketAttribute.cs b/src/libnpsharp/RPC/Messages/PacketAttribute.cs
similarity index 65%
rename from src/libnpsharp/RPC/Packets/PacketAttribute.cs
rename to src/libnpsharp/RPC/Messages/PacketAttribute.cs
index ed5124b..fc272e2 100644
--- a/src/libnpsharp/RPC/Packets/PacketAttribute.cs
+++ b/src/libnpsharp/RPC/Messages/PacketAttribute.cs
@@ -1,8 +1,8 @@
using System;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
- class PacketAttribute : Attribute
+ internal sealed class PacketAttribute : Attribute
{
public PacketAttribute(uint type)
{
diff --git a/src/libnpsharp/RPC/Messages/ProfileDataResult.cs b/src/libnpsharp/RPC/Messages/ProfileDataResult.cs
new file mode 100644
index 0000000..9d3ba7b
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/ProfileDataResult.cs
@@ -0,0 +1,17 @@
+using System;
+using ProtoBuf;
+
+namespace NPSharp.RPC.Messages
+{
+ [ProtoContract]
+ public sealed class ProfileDataResult
+ {
+ internal ProfileDataResult() { }
+
+ [ProtoMember(1)]
+ public UInt64 NPID { get; set; }
+
+ [ProtoMember(2)]
+ public byte[] Profile { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Messages/RPCClientMessage.cs b/src/libnpsharp/RPC/Messages/RPCClientMessage.cs
new file mode 100644
index 0000000..444adaa
--- /dev/null
+++ b/src/libnpsharp/RPC/Messages/RPCClientMessage.cs
@@ -0,0 +1,82 @@
+using System;
+using System.IO;
+using log4net;
+
+namespace NPSharp.RPC.Messages
+{
+ public abstract class RPCClientMessage : RPCMessage
+ {
+
+ private static readonly ILog _log;
+
+ static RPCClientMessage()
+ {
+ _log = LogManager.GetLogger("RPCClientMessage");
+ }
+
+ public byte[] Serialize(uint id)
+ {
+#if DEBUG
+ foreach (var prop in GetType().GetProperties())
+ {
+ Console.WriteLine("\t{0} = {1}", prop.Name, prop.GetValue(this));
+ }
+#endif
+
+ byte[] content;
+ using (var bufferStream = new MemoryStream())
+ {
+ ProtoBuf.Serializer.Serialize(bufferStream, this);
+ bufferStream.Seek(0, SeekOrigin.Begin);
+ content = bufferStream.ToArray();
+ }
+
+ _log.DebugFormat("Serialized packet to {0} bytes", content.Length);
+
+ byte[] buffArray;
+ using (var ms = new MemoryStream())
+ {
+ using (var bw = new BinaryWriter(ms))
+ {
+ bw.Write(Signature);
+ bw.Write((uint)content.Length);
+ bw.Write(GetTypeId());
+ bw.Write(id);
+ bw.Write(content);
+ bw.Flush();
+
+ ms.Seek(0, SeekOrigin.Begin);
+ buffArray = ms.ToArray();
+ }
+ }
+
+#if DEBUG
+ Console.Write("\t");
+
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.Write(BitConverter.ToString(buffArray, 0, sizeof(uint)).Replace("-", ""));
+
+ Console.ResetColor();
+ Console.ForegroundColor = ConsoleColor.DarkRed;
+ Console.Write(BitConverter.ToString(buffArray, 1 * sizeof(uint), sizeof(uint)).Replace("-", ""));
+
+ Console.ResetColor();
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.Write(BitConverter.ToString(buffArray, 2 * sizeof(uint), sizeof(uint)).Replace("-", ""));
+
+ Console.ResetColor();
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Console.Write(BitConverter.ToString(buffArray, 3 * sizeof(uint), sizeof(uint)).Replace("-", ""));
+
+ Console.ResetColor();
+ Console.ForegroundColor = ConsoleColor.Magenta;
+ Console.Write(BitConverter.ToString(buffArray, 4 * sizeof(uint)).Replace("-", ""));
+
+ Console.ResetColor();
+ Console.WriteLine();
+#endif
+
+ return buffArray;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/Packets/RPCMessage.cs b/src/libnpsharp/RPC/Messages/RPCMessage.cs
similarity index 84%
rename from src/libnpsharp/RPC/Packets/RPCMessage.cs
rename to src/libnpsharp/RPC/Messages/RPCMessage.cs
index 7712425..3d1f781 100644
--- a/src/libnpsharp/RPC/Packets/RPCMessage.cs
+++ b/src/libnpsharp/RPC/Messages/RPCMessage.cs
@@ -1,8 +1,8 @@
using System.Linq;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
- public class RPCMessage
+ public abstract class RPCMessage
{
internal const uint Signature = 0xDEADC0DE; // I wonder if aiw3 changed this since kernal noted it in his source code.
diff --git a/src/libnpsharp/RPC/Packets/RPCServerMessage.cs b/src/libnpsharp/RPC/Messages/RPCServerMessage.cs
similarity index 54%
rename from src/libnpsharp/RPC/Packets/RPCServerMessage.cs
rename to src/libnpsharp/RPC/Messages/RPCServerMessage.cs
index 84de050..5590d6a 100644
--- a/src/libnpsharp/RPC/Packets/RPCServerMessage.cs
+++ b/src/libnpsharp/RPC/Messages/RPCServerMessage.cs
@@ -1,34 +1,64 @@
-using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
+using log4net;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
- public class RPCServerMessage : RPCMessage
+ public abstract class RPCServerMessage : RPCMessage
{
+
+ private static readonly ILog Log;
+
+ static RPCServerMessage()
+ {
+ Log = LogManager.GetLogger("RPCServerMessage");
+ }
+
+ // Internal constructor to make classes unconstructible from outside
+ internal RPCServerMessage() { }
+
public uint MessageId { get; private set; }
public static RPCServerMessage Deserialize(NetworkStream ns)
{
- var header = new byte[16];
+ var header = new byte[4 * sizeof(uint)];
+ Log.Debug("Reading...");
var l = ns.Read(header, 0, header.Length);
if (l == 0)
+ {
+ Log.Debug("Received 0 bytes");
return null;
+ }
if (l < 16)
- throw new ProtocolViolationException("Received incomplete header");
+ {
+ Log.ErrorFormat("Received incomplete header ({0} bytes of 16 wanted bytes)", l);
+ throw new ProtocolViolationException("Received incomplete header");
+ }
+
+ uint signature, length, type, pid;
+ using (var ms = new MemoryStream(header))
+ {
+ using (var br = new BinaryReader(ms))
+ {
+ signature = br.ReadUInt32();
+ length = br.ReadUInt32();
+ type = br.ReadUInt32();
+ pid = br.ReadUInt32();
+ }
+ }
- var signature = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToUInt32(header, 0));
- var length = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToUInt32(header, 4));
- var type = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToUInt32(header, 8));
var buffer = new byte[length];
ns.Read(buffer, 0, buffer.Length);
if (signature != Signature)
+ {
+ Log.Error("Received invalid signature");
throw new ProtocolViolationException("Received packet with invalid signature");
+ }
RPCServerMessage packet;
@@ -42,14 +72,13 @@ namespace NPSharp.RPC.Packets
).ToArray();
if (!types.Any())
{
- throw new ProtocolViolationException("Received packet of unknown type");
+ throw new ProtocolViolationException(string.Format("Received packet of unknown type ({0})", type));
}
if (types.Count() > 1)
{
#if DEBUG
Debug.Fail(string.Format("Bug in program code: Found more than 1 type for packet ID {0}", type));
#else
- // TODO: log4net
return null;
#endif
}
@@ -59,7 +88,7 @@ namespace NPSharp.RPC.Packets
);
}
- packet.MessageId = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToUInt32(header, 12));
+ packet.MessageId = pid;
return packet;
}
diff --git a/src/libnpsharp/RPC/Packets/StorageGetPublisherFileMessage.cs b/src/libnpsharp/RPC/Messages/StorageGetPublisherFileMessage.cs
similarity index 58%
rename from src/libnpsharp/RPC/Packets/StorageGetPublisherFileMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageGetPublisherFileMessage.cs
index 86b6732..f4e3b86 100644
--- a/src/libnpsharp/RPC/Packets/StorageGetPublisherFileMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageGetPublisherFileMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[ProtoContract]
[Packet(1101)]
- class StorageGetPublisherFileMessage : RPCClientMessage
+ public sealed class StorageGetPublisherFileMessage : RPCClientMessage
{
[ProtoMember(1)]
public string FileName { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StorageGetUserFileMessage.cs b/src/libnpsharp/RPC/Messages/StorageGetUserFileMessage.cs
similarity index 71%
rename from src/libnpsharp/RPC/Packets/StorageGetUserFileMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageGetUserFileMessage.cs
index 0b27e3b..4b0ffa6 100644
--- a/src/libnpsharp/RPC/Packets/StorageGetUserFileMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageGetUserFileMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1102)]
[ProtoContract]
- class StorageGetUserFileMessage : RPCClientMessage
+ public sealed class StorageGetUserFileMessage : RPCClientMessage
{
[ProtoMember(1)]
public string FileName { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StoragePublisherFileMessage.cs b/src/libnpsharp/RPC/Messages/StoragePublisherFileMessage.cs
similarity index 72%
rename from src/libnpsharp/RPC/Packets/StoragePublisherFileMessage.cs
rename to src/libnpsharp/RPC/Messages/StoragePublisherFileMessage.cs
index 77881b2..2fc58e1 100644
--- a/src/libnpsharp/RPC/Packets/StoragePublisherFileMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StoragePublisherFileMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1111)]
[ProtoContract]
- class StoragePublisherFileMessage : RPCServerMessage
+ public sealed class StoragePublisherFileMessage : RPCServerMessage
{
[ProtoMember(1)]
public int Result { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StorageSendRandomStringMessage.cs b/src/libnpsharp/RPC/Messages/StorageSendRandomStringMessage.cs
similarity index 57%
rename from src/libnpsharp/RPC/Packets/StorageSendRandomStringMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageSendRandomStringMessage.cs
index 6943bf7..fb31206 100644
--- a/src/libnpsharp/RPC/Packets/StorageSendRandomStringMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageSendRandomStringMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1104)]
[ProtoContract]
- class StorageSendRandomStringMessage : RPCClientMessage
+ public sealed class StorageSendRandomStringMessage : RPCClientMessage
{
[ProtoMember(1)]
public string RandomString { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StorageUserFileMessage.cs b/src/libnpsharp/RPC/Messages/StorageUserFileMessage.cs
similarity index 77%
rename from src/libnpsharp/RPC/Packets/StorageUserFileMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageUserFileMessage.cs
index 3a2b85a..e4f6d87 100644
--- a/src/libnpsharp/RPC/Packets/StorageUserFileMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageUserFileMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1112)]
[ProtoContract]
- class StorageUserFileMessage : RPCServerMessage
+ public sealed class StorageUserFileMessage : RPCServerMessage
{
[ProtoMember(1)]
public int Result { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StorageWriteUserFileMessage.cs b/src/libnpsharp/RPC/Messages/StorageWriteUserFileMessage.cs
similarity index 72%
rename from src/libnpsharp/RPC/Packets/StorageWriteUserFileMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageWriteUserFileMessage.cs
index b9a9dd9..95e41b4 100644
--- a/src/libnpsharp/RPC/Packets/StorageWriteUserFileMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageWriteUserFileMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1103)]
[ProtoContract]
- class StorageWriteUserFileMessage : RPCClientMessage
+ public sealed class StorageWriteUserFileMessage : RPCClientMessage
{
[ProtoMember(1)]
public string FileName { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/StorageWriteUserFileResultMessage.cs b/src/libnpsharp/RPC/Messages/StorageWriteUserFileResultMessage.cs
similarity index 71%
rename from src/libnpsharp/RPC/Packets/StorageWriteUserFileResultMessage.cs
rename to src/libnpsharp/RPC/Messages/StorageWriteUserFileResultMessage.cs
index 8c7f463..fb70565 100644
--- a/src/libnpsharp/RPC/Packets/StorageWriteUserFileResultMessage.cs
+++ b/src/libnpsharp/RPC/Messages/StorageWriteUserFileResultMessage.cs
@@ -1,10 +1,10 @@
using ProtoBuf;
-namespace NPSharp.RPC.Packets
+namespace NPSharp.RPC.Messages
{
[Packet(1113)]
[ProtoContract]
- class StorageWriteUserFileResultMessage : RPCServerMessage
+ public sealed class StorageWriteUserFileResultMessage : RPCServerMessage
{
[ProtoMember(1)]
public int Result { get; set; }
diff --git a/src/libnpsharp/RPC/Packets/RPCClientMessage.cs b/src/libnpsharp/RPC/Packets/RPCClientMessage.cs
deleted file mode 100644
index d08ae6f..0000000
--- a/src/libnpsharp/RPC/Packets/RPCClientMessage.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-
-namespace NPSharp.RPC.Packets
-{
- public class RPCClientMessage : RPCMessage
- {
- public byte[] Serialize(uint id)
- {
- byte[] content;
- using (var bufferStream = new MemoryStream())
- {
- ProtoBuf.Serializer.Serialize(bufferStream, this);
- bufferStream.Seek(0, SeekOrigin.Begin);
- content = bufferStream.ToArray();
- }
-
- var buffer = new List();
- buffer.AddRange(BitConverter.GetBytes((uint)IPAddress.HostToNetworkOrder(Signature)));
- buffer.AddRange(BitConverter.GetBytes((uint)IPAddress.HostToNetworkOrder(content.Length)));
- buffer.AddRange(BitConverter.GetBytes((uint)IPAddress.HostToNetworkOrder(GetTypeId())));
- buffer.AddRange(BitConverter.GetBytes((uint)IPAddress.HostToNetworkOrder(id)));
- buffer.AddRange(content);
-
- return buffer.ToArray();
- }
- }
-}
\ No newline at end of file
diff --git a/src/libnpsharp/RPC/RPCClientStream.cs b/src/libnpsharp/RPC/RPCClientStream.cs
index 87d3b8c..82396c1 100644
--- a/src/libnpsharp/RPC/RPCClientStream.cs
+++ b/src/libnpsharp/RPC/RPCClientStream.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Net.Sockets;
using log4net;
-using NPSharp.RPC.Packets;
+using NPSharp.RPC.Messages;
namespace NPSharp.RPC
{
@@ -13,7 +13,7 @@ namespace NPSharp.RPC
{
private NetworkStream _ns;
private uint _id;
- private ILog _log;
+ private readonly ILog _log;
private readonly string _host;
private readonly ushort _port;
@@ -38,6 +38,8 @@ namespace NPSharp.RPC
/// True if the connection succeeded, otherwise false.
public bool Open()
{
+ _log.Debug("Open() start");
+
// Connection already established?
if (_ns != null)
throw new InvalidOperationException("Connection already opened");
@@ -52,6 +54,8 @@ namespace NPSharp.RPC
return false;
}
_ns = tcp.GetStream();
+
+ _log.Debug("Open() end");
return true;
}
@@ -82,6 +86,7 @@ namespace NPSharp.RPC
/// The method to call when we receive a response to the next message
public void AttachCallback(Action callback)
{
+ _log.DebugFormat("AttachCallback for packet id {0}", _id);
if (_callbacks.ContainsKey(_id))
throw new Exception("There is already a callback for the current message. You can only add max. one callback.");
_callbacks.Add(_id, callback);
@@ -120,7 +125,12 @@ namespace NPSharp.RPC
var message = RPCServerMessage.Deserialize(_ns);
if (message == null)
+ {
+ _log.Debug("Recv NULL message");
return null;
+ }
+
+ _log.DebugFormat("Received packet ID {1} (type {0})", message.GetType().Name, message.MessageId);
if (!_callbacks.ContainsKey(message.MessageId))
return message;
@@ -128,8 +138,6 @@ namespace NPSharp.RPC
_callbacks[message.MessageId].Invoke(message);
_callbacks.Remove(message.MessageId);
- _log.DebugFormat("Received packet ID {1} (type {0})", message.GetType().Name, message.MessageId);
-
return message;
}
}
diff --git a/src/libnpsharp/libnpsharp.csproj b/src/libnpsharp/libnpsharp.csproj
index 382cbd9..effa5d8 100644
--- a/src/libnpsharp/libnpsharp.csproj
+++ b/src/libnpsharp/libnpsharp.csproj
@@ -56,24 +56,35 @@
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+