예제 #1
0
        protected virtual void Dispose(bool disposing)
        {
            if (disposed)
            {
                return;
            }

            if (disposing)
            {
                socket.Dispose();
            }
            disposed = true;
        }
            public void RunPipeline(PairSocket shim)
            {
                publisherSocket = context.CreatePublisherSocket();
                publisherSocket.Bind("tcp://*:" + StreamingProtocol.Port);

                snapshotSocket = context.CreateResponseSocket();
                snapshotSocket.Bind("tcp://*:" + SnapshotProtocol.Port);
                snapshotSocket.ReceiveReady += OnSnapshotReady;

                shim.ReceiveReady += OnShimReady;

                heartbeatTimer          = new NetMQTimer(StreamingProtocol.HeartbeatInterval);
                heartbeatTimer.Elapsed += OnHeartbeatTimerElapsed;

                shim.SignalOK();

                poller = new Poller();
                poller.AddSocket(shim);
                poller.AddSocket(snapshotSocket);
                poller.AddTimer(heartbeatTimer);
                poller.Start();

                publisherSocket.Dispose();
                snapshotSocket.Dispose();
            }
예제 #3
0
        private void Serve()
        {
            log.Info("Session server is starting.");
            responseSocket = new ResponseSocket();

            switch (sessionType)
            {
            case eSessionType.Local:
                responseSocket.Bind("inproc://opendiablo2-session");
                break;

            case eSessionType.Server:
            case eSessionType.Remote:
            default:
                throw new OpenDiablo2Exception("This session type is currently unsupported.");
            }

            OnJoinGame        += OnJoinGameHandler;
            OnMoveRequest     += OnMovementRequestHandler;
            OnUpdateEquipment += OnUpdateEquipmentHandler;

            var proactor = new NetMQProactor(responseSocket, (socket, message) =>
            {
                foreach (var msg in message)
                {
                    using (var ms = new MemoryStream(msg.ToByteArray()))
                        using (var br = new BinaryReader(ms))
                        {
                            var messageFrame = getMessageFrame((eMessageFrameType)br.ReadByte());
                            messageFrame.LoadFrom(br);
                            messageFrame.Process(socket.GetHashCode(), this);
                        }
                }
            });

            running = true;
            WaitServerStartEvent.Set();
            Task.Run(() =>
            {
                var lastRun = DateTime.Now;
                while (running)
                {
                    var newTime  = DateTime.Now;
                    var timeDiff = (newTime - lastRun).TotalMilliseconds;
                    lastRun      = newTime;

                    gameServer.Update((int)timeDiff);
                    if (timeDiff < serverUpdateRate)
                    {
                        Thread.Sleep((int)Math.Min(serverUpdateRate, Math.Max(0, serverUpdateRate - timeDiff)));
                    }
                }
            });
            resetEvent.WaitOne();
            proactor.Dispose();
            running = false;
            responseSocket.Dispose();
            log.Info("Session server has stopped.");
        }
예제 #4
0
 public void Dispose()
 {
     _cancellationTokenSource?.Cancel();
     _task?.Wait();
     _task?.Dispose();
     _responseSocket?.Dispose();
     _cancellationTokenSource?.Dispose();
 }
예제 #5
0
        public override void WillTerminate(NSNotification notification)
        {
            _socketServer?.Disconnect(Ipc.RepoZIpcEndpoint.Address);
            _socketServer?.Dispose();

            // Insert code here to tear down your application
            NSEvent.RemoveMonitor(_eventMonitor);
        }
예제 #6
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         _socketServer?.Disconnect(EndpointProvider.Address);
         _socketServer?.Dispose();
         _socketServer = null;
     }
 }
 public void Stop()
 {
     running = false;
     try {
         server.Dispose();
         t.Abort();
     } catch (Exception ex) {
         ;
     }
 }
예제 #8
0
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    socket?.Dispose();
                }
                disposedValue = true;
            }
        }
예제 #9
0
        private void Serve()
        {
            log.Info("Session server is starting.");
            responseSocket = new ResponseSocket();

            switch (sessionType)
            {
            case eSessionType.Local:
                responseSocket.Bind("inproc://opendiablo2-session");
                break;

            case eSessionType.Server:
            case eSessionType.Remote:
            default:
                throw new OpenDiablo2Exception("This session type is currently unsupported.");
            }

            OnJoinGame    += OnJoinGameHandler;
            OnMoveRequest += OnMovementRequestHandler;

            var proactor = new NetMQProactor(responseSocket, (socket, message) =>
            {
                var bytes         = message.First().ToByteArray();
                var frameType     = (eMessageFrameType)bytes[0];
                var frameData     = bytes.Skip(1).ToArray(); // TODO: Can we maybe use pointers? This seems wasteful
                var messageFrame  = getMessageFrame(frameType);
                messageFrame.Data = frameData;
                messageFrame.Process(socket.GetHashCode(), this);
            });

            running = true;
            WaitServerStartEvent.Set();
            Task.Run(() =>
            {
                var lastRun = DateTime.Now;
                while (running)
                {
                    var newTime  = DateTime.Now;
                    var timeDiff = (newTime - lastRun).TotalMilliseconds;
                    lastRun      = newTime;

                    gameServer.Update((int)timeDiff);
                    if (timeDiff < serverUpdateRate)
                    {
                        Thread.Sleep((int)Math.Min(serverUpdateRate, Math.Max(0, serverUpdateRate - timeDiff)));
                    }
                }
            });
            resetEvent.WaitOne();
            proactor.Dispose();
            running = false;
            responseSocket.Dispose();
            log.Info("Session server has stopped.");
        }
예제 #10
0
        protected override Task DestroyInternal()
        {
            _cancel.Cancel();

            _poller.Stop();

            _heartbeatSocket.Close();
            _heartbeatSocket.Dispose();

            _stateRequestSocket.Close();
            _stateRequestSocket.Dispose();

            return(Task.CompletedTask);
        }
예제 #11
0
    protected override void Run()
    {
        ForceDotNet.Force();                  // this line is needed to prevent unity freeze after one use, not sure why yet

        using (server = new ResponseSocket()) // check if its response or request ?
        {
            server.Bind("tcp://*:1234");      //SEND

            using (client = new RequestSocket())
            {
                client.Connect("tcp://localhost:2222"); // RECIEVE


                // for (int i = 0; i < 2 && Running; i++)
                while (Running)
                {
                    // TO BE ABLE TO SEND USING SERVER SOCKET:
                    string DummyServerReceive = server.ReceiveFrameString();
                    //Debug.Log("MY DUMMY SERVER REC: " + DummyServerReceive);
                    //SENDING TO SERVER :  //SEND A VARIABLE BOOLEAN HERE
                    server.SendFrame(Mode + "," + Yindex + "," + Xindex + "," + Resign + "," + Pass + "," + HumanColor);
                    //Pass = "******";
                    //Resign = "-1";
                    //Debug.Log("SERVER IS DONE ");

                    // DUMMY SEND OF CLIENT TO RECEIVE
                    client.SendFrame("HELLOOOOOOO");

                    while (Running)
                    {
                        message = client.ReceiveFrameString(); // this returns true if it's successful

                        //Debug.Log("MESSAGE IS :" + this.message);

                        break;
                    }
                }

                client.Disconnect("tcp://localhost:2222");
                client.Close();
                client.Dispose();
            }
            server.Disconnect("tcp://*:1234");
            server.Close();
            server.Dispose();
        }

        NetMQConfig.Cleanup();
    }
예제 #12
0
        protected void Dispose(bool dispose)
        {
            if (!_disposed)
            {
                if (dispose)
                {
                    if (_socket != null)
                    {
                        _socket.Dispose();
                    }

                    _disposed = true;
                }
            }
        }
예제 #13
0
        public void Kill()
        {
            _poller.Stop();

            _heartbeat.Close();
            _heartbeat.Dispose();

            _frontend.Close();
            _frontend.Dispose();

            _backend.Close();
            _backend.Dispose();

            _workerQueue.Dispose();
            _workQueue.Dispose();
        }
예제 #14
0
파일: ZmqImpl.cs 프로젝트: inwazy/Zeron
        /// <summary>
        /// Dispose
        /// </summary>
        /// <returns>Returns void.</returns>
        public void Dispose()
        {
            m_PublisherThread.Abort();
            m_SubscriberThread.Abort();
            m_ResponseThread.Abort();

            m_PublisherSocket.Dispose();
            m_SubscriberSocket.Dispose();
            m_ResponseSocket.Dispose();

            m_PublisherSignal.Dispose();

            m_SubAPIResponse.Clear();
            m_SubAPITypeResponse.Clear();
            m_RepAPIResponse.Clear();
            m_RepAPITypeResponse.Clear();
        }
예제 #15
0
        protected override void OnExit(ExitEventArgs e)
        {
            _socketServer?.Disconnect(Ipc.RepoZIpcEndpoint.Address);
            _socketServer?.Dispose();

            _hotkey.Unregister();

            _explorerUpdateTimer.Change(Timeout.Infinite, Timeout.Infinite);

            var explorerHandler = TinyIoCContainer.Current.Resolve <WindowsExplorerHandler>();

            explorerHandler.CleanTitles();

            _notifyIcon.Dispose();

            base.OnExit(e);
        }
예제 #16
0
        public void Stop()
        {
            _cancel.Cancel();

            _poller.Stop();

            _heartbeat.Close();
            _heartbeat.Dispose();

            _publishStateUpdate.Close();
            _publishStateUpdate.Dispose();

            _subscribeToUpdates.Close();
            _subscribeToUpdates.Dispose();

            _stateRequest.Close();
            _stateRequest.Dispose();
        }
예제 #17
0
        public override Task Stop()
        {
            _cancel.Cancel();

            _poller.Stop();

            _heartbeat.Close();
            _heartbeat.Dispose();

            _frontend.Close();
            _frontend.Dispose();

            _backend.Close();
            _backend.Dispose();


            return(Task.CompletedTask);
        }
 private void StopQueryMQ()
 {
     try
     {
         if (null != _resPoller)
         {
             _resPoller.Stop();
             _resPoller.Remove(_resSocket);
             _resSocket.ReceiveReady -= _resSocket_ReceiveReady;
             _resSocket.Dispose();
             _resPoller.Dispose();
             _resSocket = null;
             _resPoller = null;
         }
     }
     catch (Exception ex)
     {
     }
 }
예제 #19
0
        private void BackgroundTask(object state)
        {
            var            cancellationToken = (CancellationToken)state;
            ResponseSocket socket            = _ctx.CreateResponseSocket();

            try
            {
                switch (_cxMode)
                {
                case ConnectionMode.Connect:
                    socket.Connect(_address);
                    break;

                case ConnectionMode.Bind:
                    socket.Bind(_address);
                    break;
                }

                byte[] receiveBuffer;
                while (!cancellationToken.IsCancellationRequested)
                {
                    try
                    {
                        receiveBuffer = socket.Receive();
                        if (receiveBuffer == null)
                        {
                            continue; // NetMQ > 3.3.0.11
                        }
                    }
                    catch (AgainException)
                    {
                        continue; // NetMQ = 3.3.0.11
                    }

                    #region Always send a reply...

                    try
                    {
                        Thread.Sleep(500); // simulates processing...
                        socket.Send(string.Format("Reply ({0})", Encoding.UTF8.GetString(receiveBuffer)));
                    }
                    catch (TerminatingException)
                    {
                        try
                        {
                            socket.Send("Exit...");
                        }
                        catch
                        {
                        }
                        throw;
                    }

                    #endregion
                }
            }
            catch (TerminatingException)
            {
            }
            finally
            {
                try
                {
                    socket.Dispose();
                }
                catch (NetMQException)
                {
                }
            }
        }
예제 #20
0
 public void Dispose() => _socket?.Dispose();
예제 #21
0
        private void dataServer()
        {
            AsyncIO.ForceDotNet.Force();
            using (var dataSender = new ResponseSocket()) {
                dataSender.Bind("tcp://*:5565");
                Debug.Log("Enter while.. ");

                while (isRunning)
                {
                    string message = dataSender.ReceiveFrameString();
                    print("Got request message: " + message);

                    // re-run scene iteration if true
                    if (doGatherOnRequest)
                    {
                        gatherSceneData();
                    }

                    switch (message)
                    {
                    case "header":
                        print("Send Header.. ");
                        dataSender.SendFrame(headerByteData);
                        print(string.Format(".. Nodes ({0} bytes) sent ", headerByteData.Length));
                        break;

                    case "nodes":
                        print("Send Nodes.. ");
                        dataSender.SendFrame(nodesByteData);
                        print(string.Format(".. Nodes ({0} bytes) sent ", nodesByteData.Length));
                        break;

                    case "objects":
                        print("Send Objects.. ");
                        dataSender.SendFrame(objectsByteData);
                        print(string.Format(".. Objects ({0} bytes) sent ", objectsByteData.Length));
                        break;

                    case "textures":
                        print("Send Textures.. ");
                        dataSender.SendFrame(texturesByteData);
                        print(string.Format(".. Textures ({0} bytes) sent ", texturesByteData.Length));
                        break;

#if TRUNK
                    case "materials":
                        print("Send Materials.. ");
                        dataSender.SendFrame(materialsByteData);
                        print(string.Format(".. Materials ({0} bytes) sent ", materialsByteData.Length));
                        break;
#endif
                    default:
                        break;
                    }
                }

                dataSender.Unbind("tcp://127.0.0.1:5565");
                dataSender.Close();
                dataSender.Dispose();
            }
            //NetMQConfig.Cleanup();
        }
예제 #22
0
 public void Kill()
 {
     _heartbeat.Close();
     _heartbeat.Dispose();
 }
예제 #23
0
        private void dataServer()
        {
            AsyncIO.ForceDotNet.Force();
            using (var dataSender = new ResponseSocket())
            {
                dataSender.Bind("tcp://" + VPETSettings.Instance.serverIP + ":5565");
                Debug.Log("Enter while.. ");

                while (isRunning)
                {
                    string message = "";
                    dataSender.TryReceiveFrameString(out message);
                    //print ("Got request message: " + message);

                    // re-run scene iteration if true
                    if (doGatherOnRequest)
                    {
                        gatherSceneData();
                    }

                    switch (message)
                    {
                    case "header":
                        print("Send Header.. ");
                        dataSender.SendFrame(headerByteData);
                        print(string.Format(".. Nodes ({0} bytes) sent ", headerByteData.Length));
                        break;

                    case "nodes":
                        print("Send Nodes.. ");
                        dataSender.SendFrame(nodesByteData);
                        print(string.Format(".. Nodes ({0} bytes) sent ", nodesByteData.Length));
                        break;

                    case "objects":
                        print("Send Objects.. ");
                        dataSender.SendFrame(objectsByteData);
                        print(string.Format(".. Objects ({0} bytes) sent ", objectsByteData.Length));
                        break;

                    case "characters":
                        print("Send Characters.. ");
                        dataSender.SendFrame(charactersByteData);
                        print(string.Format(".. Characters ({0} bytes) sent ", charactersByteData.Length));
                        break;

                    case "textures":
                        print("Send Textures.. ");
                        dataSender.SendFrame(texturesByteData);
                        print(string.Format(".. Textures ({0} bytes) sent ", texturesByteData.Length));
                        break;

#if TRUNK
                    case "materials":
                        print("Send Materials.. ");
                        dataSender.SendFrame(materialsByteData);
                        print(string.Format(".. Materials ({0} bytes) sent ", materialsByteData.Length));
                        break;
#endif
                    default:
                        break;
                    }
                }

                // TODO: check first if closed
                try
                {
                    dataSender.Disconnect("tcp://" + VPETSettings.Instance.serverIP + ":5565");
                    dataSender.Dispose();
                    dataSender.Close();
                }
                finally
                {
                    NetMQConfig.Cleanup(false);
                }
            }
        }
예제 #24
0
 public void Dispose()
 {
     _poller.Dispose();
     _server.Dispose();
 }
예제 #25
0
파일: ZMQServer.cs 프로젝트: Setz0r/Onyx
 public void Close()
 {
     poller.StopAsync();
     socket.Dispose();
 }
예제 #26
0
 public Task StopAsync(CancellationToken cancellationToken)
 {
     _server.Dispose();
     return(Task.CompletedTask);
 }
예제 #27
0
 void OnDisable()
 {
     _server?.Dispose();
     NetMQConfig.Cleanup(false);
 }