private void waitClient(object o) { ClientBuf clientPack = (ClientBuf)o; NetworkStream stream = clientPack.client.GetStream(); byte[] buff = new byte[MAX_SOCKET_BUF]; while (true) { int nBytes = stream.Read(buff, 0, buff.Length); if (nBytes == 0) { break; } clientPack.mem.Write(buff, 0, nBytes); if (pushPacket(ref clientPack)) { mMRE.Set(); } } stream.Close(); CloseClient(clientPack.id); }
private void waitClient(object o) { ClientBuf clientPack = (ClientBuf)o; NetworkStream stream = clientPack.client.GetStream(); byte[] buff = new byte[MAX_SOCKET_BUF]; while (true) { int nBytes = 0; try { nBytes = stream.Read(buff, 0, buff.Length); if (nBytes == 0) { break; } } catch (Exception e) { LOG.echo(e.ToString()); break; } clientPack.buf.Push(buff, nBytes); QueuePack info = new QueuePack(); info.ClientID = clientPack.id; info.buf = clientPack.buf; info.type = NetType.DATA; info.ipAddr = clientPack.address; mQueue.Enqueue(info); mMRE.Set(); } stream.Close(); CloseClient(clientPack.id); }
private int createNewClient(TcpClient newClient) { int newID = findEmptyID(); if (newID == -1) { return(-1); } int idx = newID; mClients[idx] = new ClientBuf(); mClients[idx].id = newID; mClients[idx].client = newClient; mClients[idx].address = ((IPEndPoint)newClient.Client.RemoteEndPoint).Address.ToString(); mClients[idx].buf = new FifoBuffer(MAX_CLIENT_BUF); QueuePack info = new QueuePack(); info.ClientID = newID; info.buf = null; info.ipAddr = mClients[idx].address; info.type = NetType.CONNECT; mQueue.Enqueue(info); mMRE.Set(); Task.Factory.StartNew(waitClient, mClients[idx]); return(newID); }
private void CloseClient(int id) { int idx = id; ClientBuf clientPack = mClients[idx]; clientPack.mem.Close(); clientPack.client.Close(); clientPack.id = -1; clientPack.client = null; clientPack.mem = null; mClients[idx] = null; }
private void CloseClient(int id) { int idx = id; ClientBuf clientPack = mClients[idx]; clientPack.mem.Close(); clientPack.client.Close(); if (clientPack.userName != null) { mUserNameMap.Remove(clientPack.userName); } clientPack.id = -1; clientPack.client = null; clientPack.mem = null; clientPack.userName = null; mClients[idx] = null; }
private int createNewClient(TcpClient newClient) { int newID = findEmptyID(); if (newID == -1) { return(-1); } int idx = newID; mClients[idx] = new ClientBuf(); mClients[idx].id = newID; mClients[idx].client = newClient; mClients[idx].mem = new MemoryStream(MAX_CLIENT_BUF); Task.Factory.StartNew(waitClient, mClients[idx]); return(newID); }
private void CloseClient(int id) { int idx = id; ClientBuf clientPack = mClients[idx]; QueuePack info = new QueuePack(); info.ClientID = id; info.buf = null; info.ipAddr = clientPack.address; info.type = NetType.DISCON; mQueue.Enqueue(info); mMRE.Set(); clientPack.client.Close(); clientPack.id = -1; clientPack.client = null; clientPack.buf = null; clientPack.address = ""; mClients[idx] = null; }
private bool pushPacket(ref ClientBuf client) { long nRecvLen = client.mem.Length; byte[] buf = client.mem.GetBuffer(); int headSize = ICD.HEADER.HeaderSize(); if (nRecvLen < headSize) { return(false); } ICD.HEADER head = ICD.HEADER.GetHeaderInfo(buf); if (head.sof != (uint)ICD.MAGIC.SOF) { client.mem = new MemoryStream(MAX_CLIENT_BUF); return(false); } uint msgSize = head.size; if (nRecvLen < msgSize) { return(false); } QueuePack pack = new QueuePack(); pack.ClientID = client.id; pack.size = msgSize; pack.buf = new byte[msgSize]; Array.Copy(buf, pack.buf, msgSize); mQueue.Enqueue(pack); client.mem = new MemoryStream(MAX_CLIENT_BUF); return(true); }