Hej, właśnie dzisiaj zacząłem się uczyć .net remoting. Chcę napisać prostą bibliotekę do przesyłania komunikatów między serverem i klientem.
Pierwsze co wyklepałem wygląda tak:
public class MessageConnector :MarshalByRefObject
{
public List<string> messagesFromRouter = new List<string>();
public List<string> messagesToRouter = new List<string>();
private int number;
public int Number
{
get
{
return number;
}
set
{
number = value;
Console.WriteLine("Nowa wartosc: " + value);
}
}
public void Open(int port)
{
TcpChannel channel = new TcpChannel(port);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MessageConnector), "Test", WellKnownObjectMode.Singleton);
}
public static MessageConnector Connect(string url)
{
MessageConnector bufer = (MessageConnector)Activator.GetObject(typeof(MessageConnector), url);
return bufer;
}
public void AddMessage(string message, bool AreUServer)
{
if (AreUServer)
{
messagesFromRouter.Add(message);
}
else
{
messagesToRouter.Add(message);
}
}
public string GetMessage(bool AreUServer)
{
if (AreUServer && messagesToRouter.Count > 0)
{
return messagesToRouter[messagesToRouter.Count - 1];
}
else if (AreUServer == false && messagesFromRouter.Count > 0)
{
return messagesFromRouter[messagesFromRouter.Count - 1];
}
else
{
return "";
}
}
}
Server tworzy sobie obiekt tej klasy i wywołuje Open, Klient wywołuje statyczną metodę Connect podając odpowiedni url, w moim przypadku taki: "tcp://localhost:8080/Test". Chcę zrobić tak by komunikacja była dwustronna, wysyłając i otrzymując wiadomości trzeba podać informację czy jest się serverem żeby było wiadomo do której listy dodać wiadomość. Problem w tej chwili mam taki że kiedy w kliencie dodam obiekt do którejś listy to z perspektywy servera nic się nie zmienia i obie listy mają Count == 0, jeśli jednak zmienię wartość pola Number z poziomu klienta to server tą zmianę rejestruje i wypisuje odpowiedni komunikat. Co robię nie tak? Pozdrawiam