Exemplo n.º 1
0
    public void Write(SocketMessager messager, ClientSocketReceiveEventHandler receiveHandler, TimeSpan timeout)
    {
        SyncReceive syncReceive = null;

        try {
            if (receiveHandler != null)
            {
                syncReceive = new SyncReceive(receiveHandler);
                lock (this._receiveHandlers_lock) {
                    if (!this._receiveHandlers.ContainsKey(messager.Id))
                    {
                        this._receiveHandlers.Add(messager.Id, syncReceive);
                    }
                    else
                    {
                        this._receiveHandlers[messager.Id] = syncReceive;
                    }
                }
            }
            if (this._running)
            {
                lock (_write_lock) {
                    NetworkStream ns = this._tcpClient.GetStream();
                    base.Write(ns, messager);
                }
                this._lastActive = DateTime.Now;
                if (syncReceive != null)
                {
                    syncReceive.Wait.Reset();
                    syncReceive.Wait.WaitOne(timeout);
                    syncReceive.Wait.Set();
                    lock (this._receiveHandlers_lock) {
                        this._receiveHandlers.Remove(messager.Id);
                    }
                }
            }
        } catch (Exception ex) {
            this._running = false;
            this.OnError(ex);
            if (syncReceive != null)
            {
                syncReceive.Wait.Set();
                lock (this._receiveHandlers_lock) {
                    this._receiveHandlers.Remove(messager.Id);
                }
            }
        }
    }
Exemplo n.º 2
0
 public SyncReceive(ClientSocketReceiveEventHandler receiveHandler)
 {
     this._receiveHandler = receiveHandler;
     this._wait           = new ManualResetEvent(false);
 }
Exemplo n.º 3
0
 public void Write(SocketMessager messager, ClientSocketReceiveEventHandler receiveHandler)
 {
     this.Write(messager, receiveHandler, TimeSpan.FromSeconds(20));
 }