private static void AcceptCallback(IAsyncResult IAR) { Socket Server, handler; try { Server = (Socket)IAR.AsyncState; handler = Server.EndAccept(IAR); } catch (ObjectDisposedException ode) { ExceptionBuffer.Add(ode); return; } allDone.Set(); string sKey = TcpAsyncCommon.DefaultUID + ++iAcceptCounter; StateObject state = new StateObject(); state.workSocket = handler; state.key = sKey; D2Sockets.Set(sKey, state); D2TReceive.Set(sKey, null); D2TSend.Set(sKey, null); D3BReceive.Set(sKey, new DataBuffer()); D3BSend.Set(sKey, new DataBuffer()); }
private static void DisconnectCallback(IAsyncResult IAR) { StateObject state = (StateObject)IAR.AsyncState; Socket handler = state.workSocket; string key = state.key; handler.EndDisconnect(IAR); handler.Shutdown(SocketShutdown.Both); handler.Disconnect(true); handler.Close(); handler.Dispose(); D2Sockets.Remove(key); D2TReceive.Remove(key); D2TSend.Remove(key); D3BReceive.Remove(key); D3BSend.Remove(key); }
public void Stop(string key) { if (key.IsNullOrEmpty()) { return; } try { GetHandler(key).Cleanup(); } finally { if (D2Sockets != null) { D2Sockets.Remove(key); } if (D3BReceive != null) { D3BReceive.Remove(key); } if (D3BSend != null) { D3BSend.Remove(key); } } }
private void AcceptCallback(IAsyncResult IAR) { Socket Server, handler; try { Server = (Socket)IAR.AsyncState; handler = Server.EndAccept(IAR); } catch (ObjectDisposedException ode) { Exceptions.Write(ode); return; } allDone.Set(); string sKey = TcpAsyncCommon.DefaultUID + TickTime.NowTicks; StateObject state = new StateObject(); state.workSocket = handler; state.key = sKey; D2Sockets.Set(sKey, state); D3BReceive.Set(sKey, new BufferedArray <byte[]>(this.Length)); D3BSend.Set(sKey, new BufferedArray <byte[]>(this.Length)); }
public byte[][] ReadAll(string key) { if (D3BReceive == null || !D3BReceive.Contains(key)) { return(null); } try { return(D3BReceive.Get(key).ReadAll()); } catch { return(null); } }
public bool SetReceiver(string key, byte[] data) { if (D3BReceive == null || !D3BReceive.Contains(key) || key.IsNullOrEmpty() || data.IsNullOrEmpty()) { return(false); } try { D3BReceive.Get(key).Write(data); return(true); } catch { return(false); } }
public byte[] Read(string key) { if (D3BReceive == null || !D3BReceive.Contains(key)) { return(null); } try { byte[] read; D3BReceive.Get(key).Read(out read); return(read); } catch { return(null); } }
public void Stop(string key) { StateObject state = D2Sockets.Get(key); try { if (state != null && state.workSocket != null) { Socket handler = state.workSocket; handler.Shutdown(SocketShutdown.Both); handler.Disconnect(true); handler.Close(); handler.Dispose(); } } catch { } finally { if (D2Sockets != null) { D2Sockets.Remove(key); } if (D2TReceive != null) { D2TReceive.Remove(key); } if (D2TSend != null) { D2TSend.Remove(key); } if (D3BReceive != null) { D3BReceive.Remove(key); } if (D3BSend != null) { D3BSend.Remove(key); } } }
private void Accept() { Socket handler = Listener.Accept(); string key = TcpAsyncCommon.DefaultUID + TickTime.NowTicks; StateObject state = new StateObject(); state.workSocket = handler; state.workSocket.NoDelay = TcpAsyncServer.NoDelay; state.workSocket.SendBufferSize = TcpAsyncServer.PacketSizeTCP; state.workSocket.ReceiveBufferSize = TcpAsyncServer.PacketSizeTCP; state.workSocket.SendTimeout = TcpAsyncServer.SendTimeout; state.workSocket.ReceiveTimeout = TcpAsyncServer.ReceiveTimeout; state.workSocket.Ttl = TcpAsyncServer.Ttl; state.key = key; state.Time = TickTime.Now; D2Sockets.Set(key, state); D3BReceive.Set(key, new BufferedArray <byte[]>(this.Length)); D3BSend.Set(key, new BufferedArray <byte[]>(this.Length)); //this.Send(key, "#START".GetBytes()); }
private static void ReadCallback(IAsyncResult IAR) { StateObject state = (StateObject)IAR.AsyncState; Socket handler = state.workSocket; int bytesRead = 0; if (!handler.Connected) { return; } try { bytesRead = handler.EndReceive(IAR); } catch { return; } if (bytesRead <= 0) { return; } System.String content = System.String.Empty; state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); content = state.sb.ToString(); if (content.IndexOf(TcpAsyncCommon.EOM) < 0) { if (content.Length < StateObject.BufferSize / 2) { try { handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); }catch (Exception e) { ExceptionBuffer.Add(e); } } else { state.sb.Clear(); //state.buffer = new byte[StateObject.BufferSize]; return; } } state.sb.Clear(); //state.buffer = new byte[StateObject.BufferSize]; List <string> Packets = content.SplitSafe(TcpAsyncCommon.EOM).ToList(); if (Packets.Count > 0) { foreach (string packet in Packets) { string subPacket = packet; if (subPacket == null) { subPacket = ""; } else { subPacket = subPacket.Replace(@"\\", @"\"); } if (!D3BReceive.Contains(state.key)) { return; } else { D3BReceive.Get(state.key).Set(subPacket); } //Thread.Sleep(1); } } }