// Добавим ссылку на объект на сервере в буффер
        // И если в буфере количество больше заданного
        // То отсылается массив ссылок, а буфуе очищается
        // Сделано, для ускорения действи при межпроцессном взаимодействии
        public void DeleteObject(AutoWrapClient Object)
        {
            if (ServerIsClosed)
            {
                return;
            }

            lock (syncForDelete)
            {
                _deletedObjects.Add(Object.Target);
                if (_deletedObjects.Count > _countDeletedObjects)
                {
                    SendDeleteObjects();
                }
            }
        }
示例#2
0
        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);
            }
        }
示例#4
0
        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();
        }