コード例 #1
0
ファイル: TcpTransport.cs プロジェクト: lsgxeva/MIEngine
        public TcpTransport(string hostname, int port, OnPacket onPacket, OnDisconnect onDisconnect)
        {
            _bQuit = false;

            _client = new TcpClient();
            _client.NoDelay = true;
            _client.ReceiveBufferSize = 2048;
            _client.SendBufferSize = 2048;
            _client.ReceiveTimeout = 0;
            _client.SendTimeout = 30000;
            _client.LingerState = new LingerOption(true, 30);
            _client.Connect(hostname, port);
            //m_stream = m_client.GetStream();

            _onPacket = onPacket;
            _onDisconnect = onDisconnect;

            DoHandShake();

            StartThread("JDbg.TcpTransport");
        }
コード例 #2
0
ファイル: Events.cs プロジェクト: nils-kt/dlivetv-api-net
 internal void FireOnDisconnect()
 {
     OnDisconnect?.Invoke();
 }
コード例 #3
0
 private void CallOnDisconnect(NetConnection client)
 {
     OnDisconnect?.Invoke(this, client);
 }
コード例 #4
0
 private void Connection_OnDisconnect(SyncIOConnectedClient client, Exception ex)
 {
     OnDisconnect?.Invoke(this, ex);
 }
コード例 #5
0
 public new void Dispose()
 {
     base.Dispose();
     _messageReplies.Clear();
     OnDisconnect?.Invoke(this, EventArgs.Empty);
 }
コード例 #6
0
 public void Disconnect()
 {
     client.Close();
     OnDisconnect?.Invoke(null);
 }
コード例 #7
0
 /// <summary>
 /// On disconnecting the observer, trigger
 /// the action(s).
 /// </summary>
 public async ValueTask Disconnect()
 {
     await(OnDisconnect.Invoke(this.Id));
 }
コード例 #8
0
ファイル: TcpServer.cs プロジェクト: itsph-ru/RC.Core
        private void runSender()
        {
            while (m_isOpen && m_port >= 0)
            {
                try
                {
                    bool moreWork = false;
                    for (int i = 0; i < connections.Count; i++)
                    {
                        if (connections[i].CallbackThread != null)
                        {
                            try
                            {
                                connections[i].CallbackThread = null;
                                lock (activeThreadsLock)
                                {
                                    activeThreads--;
                                }
                            }
                            catch (Exception ex)
                            {
                                OnError?.Invoke(this, ex);
                            }
                        }

                        if (connections[i].CallbackThread != null)
                        {
                        }
                        else if (connections[i].connected() &&
                                 (connections[i].LastVerifyTime.AddMilliseconds(m_verifyConnectionInterval) > DateTime.UtcNow ||
                                  connections[i].verifyConnected()))
                        {
                            moreWork = moreWork || processConnection(connections[i]);
                        }
                        else
                        {
                            lock (connections)
                            {
                                OnDisconnect?.Invoke(this, connections[i]);
                                connections.RemoveAt(i);
                                i--;
                            }
                        }
                    }

                    if (moreWork)
                    {
                        continue;
                    }
                    Thread.Yield();
                    lock (sem)
                    {
                        if (connections.Any(conn => conn.hasMoreWork()))
                        {
                            moreWork = true;
                        }
                    }
                    if (moreWork)
                    {
                        continue;
                    }
                    waiting = true;
                    sem.Wait(m_idleTime);
                    waiting = false;
                }
                catch (ThreadInterruptedException ex)
                {
                    OnError?.Invoke(this, ex);
                }
                catch (Exception e)
                {
                    if (m_isOpen)
                    {
                        OnError?.Invoke(this, e);
                    }
                }
            }
        }
コード例 #9
0
ファイル: DbConnection.cs プロジェクト: nvnamsss/DAM44
 protected virtual void OnDisconnectInvoke()
 {
     OnDisconnect?.Invoke(this);
 }
コード例 #10
0
        public override void HandleDisconnect()
        {
            base.HandleDisconnect();

            OnDisconnect?.Invoke(this, EventArgs.Empty);
        }
コード例 #11
0
 public void Disconnect()
 {
     _obdDevice.Disconnect();
     STDType = StandardType.Automatic;
     OnDisconnect?.Invoke();
 }
コード例 #12
0
 public void Dispose()
 {
     _messageReplies.Clear();
     _listener?.Dispose();
     OnDisconnect?.Invoke(this, EventArgs.Empty);
 }
コード例 #13
0
ファイル: TcpHostServer.cs プロジェクト: urolzeen/Fenix
 void ITcpListener.handleDisconnect(IChannel channel)
 {
     OnDisconnect?.Invoke(channel);
 }
コード例 #14
0
        protected virtual void HandleDisconnect(GhostNetConnection con)
        {
            if (!ConnectionMap.TryGetValue(con.ManagementEndPoint, out con) || con == null)
            {
                return; // Probably already disconnected.
            }
            uint id = (uint)Connections.IndexOf(con);

            if (id == uint.MaxValue)
            {
                Logger.Log(LogLevel.Verbose, "ghostnet-s", $"Client #? ({con.ManagementEndPoint}) disconnected?");
                return;
            }
            Logger.Log(LogLevel.Verbose, "ghostnet-s", $"Client #{id} ({con.ManagementEndPoint}) disconnected");

            Connections[(int)id] = null;

            if (KevinballPlayerIDs.Contains(id))
            {
                KevinballPlayerIDs.Remove(id);
            }

            if (KevinballScores.ContainsKey(id))
            {
                KevinballScores.Remove(id);
            }

            if (KevinballQueue.Contains(id))
            {
                KevinballQueue.Remove(id);
            }

            ConnectionMap[con.ManagementEndPoint] = null;

            if (con.UpdateEndPoint != null)
            {
                ConnectionMap[con.UpdateEndPoint] = null;
            }
            else
            {
                UpdateConnectionQueue[con.ManagementEndPoint.Address] = null;
            }

            ChunkMPlayer player;

            if (PlayerMap.TryGetValue(id, out player) && player != null &&
                !string.IsNullOrWhiteSpace(player.Name) &&
                !string.IsNullOrWhiteSpace(GhostNetModule.Settings.ServerMessageLeave))
            {
                BroadcastMChat(new GhostNetFrame {
                    HHead = new ChunkHHead {
                        PlayerID = id
                    },

                    MPlayer = player
                }, GhostNetModule.Settings.ServerMessageLeave, fillVars: true);
            }

            OnDisconnect?.Invoke(id, player);

            // Propagate disconnect to all other players.
            GhostNetFrame frame = new GhostNetFrame {
                HHead = new ChunkHHead {
                    PlayerID = id
                },

                MPlayer = new ChunkMPlayer {
                    Name  = "",
                    SID   = "",
                    Mode  = AreaMode.Normal,
                    Level = ""
                }
            };

            lock (PlayerMap) {
                PlayerMap[id] = null;
            }
            PropagateM(frame);
        }
コード例 #15
0
ファイル: Connection.cs プロジェクト: mehdi-payday/spherechat
        /// <summary>
        /// Début de la réception async
        /// </summary>
        /// <param name="result"></param>
        private void beginReceive(IAsyncResult result)
        {
            Buffers.Read buffer = (Buffers.Read)result.AsyncState;

            if (!Socket.Connected)
            {
                OnDisconnect?.Invoke();
                return;
            }

            int read = Socket.EndReceive(result);

            if (read == 0)
            {
                Socket.Disconnect(true);
                OnDisconnect?.Invoke();
            }
            else
            {
                Buffers.Read next;

                if (buffer.GetType() == typeof(Buffers.HTTP.Read))
                {
                    Buffers.HTTP.Read current = buffer as Buffers.HTTP.Read;
                    current.Append(read);

                    if (read == buffer.Size)
                    {
                        Socket.BeginReceive(current.Buffer, 0, current.Size, 0, beginReceive, current);
                    }
                    else if (read < buffer.Size)
                    {
                        current.Parse();

                        // Upgrade to websocket on server request
                        if (current.HTTP_STATUS == 101 && current.Headers.Contains(new KeyValuePair <string, string>("Upgrade", "websocket")))
                        {
                            OnConnected?.Invoke();
                            next = new Buffers.WebSocket.Read(new byte[40960]);
                        }
                        else
                        {
                            string payload = current.Payload.Replace("\0", "").Trim();
                            if (!string.IsNullOrEmpty(payload))
                            {
                                OnReceive?.Invoke(payload);
                            }

                            Console.WriteLine("Unable to upgrade connection");
                            OnDisconnect?.Invoke();
                            return;
                        }

                        Socket.BeginReceive(next.Buffer, 0, next.Size, 0, beginReceive, next);
                    }
                }
                else if (buffer.GetType() == typeof(Buffers.WebSocket.Read))
                {
                    Buffers.WebSocket.Read current = buffer as Buffers.WebSocket.Read;
                    current.Append(read);

                    if (read == buffer.Size)
                    {
                        Socket.BeginReceive(current.Buffer, 0, current.Size, 0, beginReceive, current);
                    }
                    else if (read < buffer.Size)
                    {
                        current.Parse();

                        if (current.Type == Buffers.WebSocket.Read.DataType.PIN)   // Answer PON to PIN
                        {
                            Buffers.WebSocket.Write pong = new Buffers.WebSocket.Write(new byte[0], Buffers.WebSocket.Write.DataType.PON, false);
                            Socket.BeginSend(pong.Parsed, 0, pong.Parsed.Length, 0, beginSend, pong);
                        }
                        else
                        {
                            OnReceive?.Invoke(Encoding.UTF8.GetString(current.Payload));
                        }

                        next = new Buffers.WebSocket.Read(new byte[40960]);
                        Socket.BeginReceive(next.Buffer, 0, next.Size, 0, beginReceive, next);
                    }
                }
            }
        }
コード例 #16
0
 public void Disconnect()
 {
     tokenSource.Cancel();
     OnDisconnect?.Invoke(this, new EventArgs());
     _webSocket.Dispose();
 }
コード例 #17
0
 internal void Disconnected()
 {
     IsConnected = false;
     OnDisconnect?.Invoke(this, EventArgs.Empty);
 }
コード例 #18
0
 private void RaiseOnDisconnect()
 {
     OnDisconnect?.Invoke();
 }
コード例 #19
0
    public void StartListening(String host, int port, OnReceive on_receive, OnConnect on_connect, OnDisconnect on_disconnect, OnListenError on_listen_error)
    {
        on_receive_      = on_receive;
        on_connect_      = on_connect;
        on_disconnect_   = on_disconnect;
        on_listen_error_ = on_listen_error;
        size_receiving_  = 0;
        IPAddress ipAddress = IPAddress.Parse(GetIPAddress(host));

        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);

        // Create a TCP/IP socket.
        listener_ = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        listener_.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

        // Bind the socket to the local endpoint and listen for incoming connections.
        try
        {
            listener_.Bind(localEndPoint);
            listener_.Listen(0);

            // Start an asynchronous socket to listen for connections.
            listener_.BeginAccept(new AsyncCallback(AcceptCallback), listener_);
        }
        catch (Exception e)
        {
            on_listen_error_(e.ToString());
        }
    }
コード例 #20
0
 internal void TriggerOnDisconnect(ServerConnectorContext serverConnectorContext)
 {
     OnDisconnect?.Invoke(serverConnectorContext);
 }
コード例 #21
0
 public void handleDisconnect(IChannel channel)
 {
     OnDisconnect?.Invoke(channel);
 }
コード例 #22
0
 private void Listener_OnDisconnect(object sender, EventArgs e)
 {
     Connected = false;
     OnDisconnect?.Invoke(this, null);
 }
コード例 #23
0
ファイル: MqttSession.cs プロジェクト: skunklab/SkunkLab.Core
 internal void Disconnect(MqttMessage message)
 {
     OnDisconnect?.Invoke(this, new MqttMessageEventArgs(message));
 }
コード例 #24
0
        internal WebSocketWrapper(Uri baseUri, WebSocketOptions options) : base(options)
        {
            _baseUri        = baseUri;
            _messageReplies = new ConcurrentDictionary <string, TaskCompletionSource <WebSocketMessageEnvelope> >();
            options.ValidateOptions();
            _options = options.Clone();

            if (!IsTrace)
            {
                _options.Logger = new NullLogger();
            }

            OnError = (sender, exception) => _options.Logger.Error(exception);

            OnChannelMessage = (sender, message) =>
                               _options.Logger.DebugFormat("Received channel message '{0}'", message);
            OnChannelPresence = (sender, _event) =>
                                _options.Logger.DebugFormat("Received channel presence '{0}'", _event);
            OnConnect           = (sender, args) => _options.Logger.Debug("Socket connected.");
            OnDisconnect        = (sender, args) => _options.Logger.Debug("Socket disconnected.");
            OnMatchmakerMatched = (sender, matched) =>
                                  _options.Logger.DebugFormat("Received matchmaker match '{0}'", matched);
            OnMatchPresence = (sender, _event) =>
                              _options.Logger.DebugFormat("Received match presence '{0}'", _event);
            OnMatchState   = (sender, state) => _options.Logger.DebugFormat("Received match state '{0}'", state);
            OnNotification = (sender, notification) =>
                             _options.Logger.DebugFormat("Received notification '{0}'", notification);
            OnStatusPresence = (sender, _event) =>
                               _options.Logger.DebugFormat("Received status presence '{0}'", _event);
            OnStreamPresence = (sender, _event) =>
                               _options.Logger.DebugFormat("Received stream presence '{0}'", _event);
            OnStreamState = (sender, state) => _options.Logger.DebugFormat("Received stream state '{0}'", state);

            Connected       += (sender, args) => OnConnect.Invoke(this, EventArgs.Empty);
            Disconnected    += (sender, args) => OnDisconnect.Invoke(this, EventArgs.Empty);
            ErrorReceived   += (sender, exception) => OnError?.Invoke(this, exception);
            MessageReceived += (sender, message) =>
            {
                if (IsTrace)
                {
                    _options.Logger.DebugFormat("Socket read message: '{0}'", message);
                }

                var envelope = message.FromJson <WebSocketMessageEnvelope>();
                if (!string.IsNullOrEmpty(envelope.Cid))
                {
                    // Handle message response.
                    TaskCompletionSource <WebSocketMessageEnvelope> completer;
                    var cid = envelope.Cid;
                    _messageReplies.TryRemove(cid, out completer);
                    if (completer == null)
                    {
                        if (IsTrace)
                        {
                            _options.Logger.InfoFormat("No task completer for message: '{0}'", cid);
                        }
                        return;
                    }

                    if (envelope.Error != null)
                    {
                        // FIXME use a dedicated exception type.
                        completer.SetException(new WebSocketException(envelope.Error.Message));
                    }
                    else
                    {
                        completer.SetResult(envelope);
                    }
                }
                else if (envelope.Error != null)
                {
                    OnError?.Invoke(this, new WebSocketException(envelope.Error.Message));
                }
                else if (envelope.ChannelMessage != null)
                {
                    OnChannelMessage?.Invoke(this, envelope.ChannelMessage);
                }
                else if (envelope.ChannelPresenceEvent != null)
                {
                    OnChannelPresence?.Invoke(this, envelope.ChannelPresenceEvent);
                }
                else if (envelope.MatchmakerMatched != null)
                {
                    OnMatchmakerMatched?.Invoke(this, envelope.MatchmakerMatched);
                }
                else if (envelope.MatchPresenceEvent != null)
                {
                    OnMatchPresence?.Invoke(this, envelope.MatchPresenceEvent);
                }
                else if (envelope.MatchState != null)
                {
                    OnMatchState?.Invoke(this, envelope.MatchState);
                }
                else if (envelope.NotificationList != null)
                {
                    foreach (var notification in envelope.NotificationList.Notifications)
                    {
                        OnNotification?.Invoke(this, notification);
                    }
                }
                else if (envelope.StatusPresenceEvent != null)
                {
                    OnStatusPresence?.Invoke(this, envelope.StatusPresenceEvent);
                }
                else if (envelope.StreamPresenceEvent != null)
                {
                    OnStreamPresence?.Invoke(this, envelope.StreamPresenceEvent);
                }
                else if (envelope.StreamState != null)
                {
                    OnStreamState?.Invoke(this, envelope.StreamState);
                }
                else
                {
                    if (IsTrace)
                    {
                        _options.Logger.InfoFormat("Socket received unrecognised message: '{0}'", message);
                    }
                }
            };
        }
コード例 #25
0
ファイル: Socket.cs プロジェクト: zhshize/BridgeSocket
        public async Task StartListen()
        {
            if (_reading)
            {
                return;
            }
            _reading = true;

            var send = Task.Run(StartSend);

            WebSocketReceiveResult closeResult = null;

            try
            {
                while (!_cancellation.IsCancellationRequested)
                {
                    try
                    {
                        var(result, message) = await ReceiveFullMessage();

                        if (result.MessageType == WebSocketMessageType.Binary)
                        {
                            var array     = message.ToArray();
                            var memStream = new MemoryStream(array, 0, array.Length);
                            HandleMessage(memStream);
                        }

                        if (result.MessageType == WebSocketMessageType.Close)
                        {
                            closeResult = result;
                            break;
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        // Exit normally
                    }
                }
                _reading = false;
                await send;

                WebSocketCloseStatus closeStatus = WebSocketCloseStatus.NormalClosure;
                if (closeResult?.CloseStatus != null)
                {
                    closeStatus = (WebSocketCloseStatus)closeResult.CloseStatus;
                }
                await DisconnectAsync(closeStatus, closeResult?.CloseStatusDescription);
            }
            catch (WebSocketException e) when(e.WebSocketErrorCode == WebSocketError.ConnectionClosedPrematurely)
            {
                OnDisconnect?.Invoke(WebSocketCloseStatus.ProtocolError, "ConnectionClosedPrematurely");
            }
            catch (Exception e)
            {
                Console.WriteLine("RECV ERR");
                Console.WriteLine(e);

                /*Disconnect();
                 * RawSocket.Dispose();*/
            }
        }
コード例 #26
0
 /// <summary>
 /// Se déclanche quand le client mobile se déconnecte de la communication socket
 /// </summary>
 private void OnSocketClientDisconnected(object sender, EventArgs e)
 {
     IsConnected = false;
     OnDisconnect?.Invoke(this, new EventArgs());
 }
コード例 #27
0
ファイル: ProcessStream.cs プロジェクト: Madghostek/STROOP
 private void ProcessClosed(object sender, EventArgs e)
 {
     IsEnabled = false;
     OnDisconnect?.Invoke(this, new EventArgs());
 }
コード例 #28
0
ファイル: XmppEvents.cs プロジェクト: yangnanhaohnhn/xmpp
 /// <summary>
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 public void Disconnect(object sender, EventArgs args = default(EventArgs))
 {
     OnDisconnect?.Invoke(sender, args);
 }
コード例 #29
0
 public void FireDisconnectEvent(Session session)
 {
     OnDisconnect?.Invoke(session);
 }
コード例 #30
0
 public void RaiseOnDisconnect()
 {
     OnDisconnect?.Invoke();
 }
コード例 #31
0
 /// <summary>
 /// Thông báo cho server biết Client này bị disconnect
 /// </summary>
 private void NotifyDisconnect()
 {
     OnDisconnect?.Invoke(Guid);
 }