// Добавим ссылку на объект на сервере в буффер // И если в буфере количество больше заданного // То отсылается массив ссылок, а буфуе очищается // Сделано, для ускорения действи при межпроцессном взаимодействии public void DeleteObject(AutoWrapClient Object) { if (ServerIsClosed) { return; } lock (syncForDelete) { _deletedObjects.Add(Object.Target); if (_deletedObjects.Count > _countDeletedObjects) { SendDeleteObjects(); } } }
public AutoWapEnumerator(AutoWrapClient target, TCPClientConnector connector) { _connector = connector; if (!AutoWrapClient.TryInvokeMember( 0, "GetIterator", new object[] { target }, out var result, _connector )) { throw new Exception(_connector.LastError); } _enumerator = (AutoWrapClient)result; }
// Отсылаем массив ссылок для удаления их из зранилища объектов на сервере private void SendDeleteObjects() { var ms = new MemoryStream(); var bw = new BinaryWriter(ms); bw.Write((byte)CallMethod.DeleteObjects); bw.Write(_deletedObjects.Count); foreach (var i in _deletedObjects) { bw.Write(i); } bw.Flush(); _deletedObjects.Clear(); var res = SendMessage(ms); object result = null; if (!AutoWrapClient.GetResult(res, ref result, this)) { throw new Exception(LastError); } }
private static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; int port = 6891; Console.WriteLine("Hello Client!"); //bool loadLocalServer = false; TCPClientConnector connector; //string dir = string.Empty; //if (loadLocalServer) // connector = TCPClientConnector.LoadAndConnectToLocalServer( //GetParentDir(dir, 4) + $@"\Server\bin\Debug\netcoreapp2.2\Server.dll"); //else //{ //3 параметр отвечает за признак постоянного соединения с сервером //Используется пул из 5 соединений connector = new TCPClientConnector("127.0.0.1", port, false); port = TCPClientConnector.GetAvailablePort(6892); connector.Open(port, 2); //} _wrap = AutoWrapClient.GetProxy(connector); // Выведем сообщение в консоли сервера string typeStr = typeof(Console).AssemblyQualifiedName; var console = _wrap.GetType(typeStr); console.WriteLine("Hello from Client"); var str = string.Empty; while (!str.ToLower().Equals("exit")) { Console.Write("Write text to server: "); str = Console.ReadLine(); console.WriteLine(str); } var testClass = (_wrap.GetType("TestClass, Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"))._new(); var text = testClass.Name(); Console.WriteLine("Текст из клиента + " + text); console.WriteLine(text); GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("Press any key"); Console.ReadKey(); // Удаления из хранилища на стороне сервера происходит пачками по 50 элементов // Отрправим оставшиеся connector.ClearDeletedObject(); // Отключимся от сервера, закроем все соединения, Tcp/Ip сервер на клиенте connector.Close(); // Если мы запустили процесс сервера // То выгрузим его //if (loadLocalServer) connector.CloseServer(); Console.ReadKey(); }