// TCP Consumer static async Task <BufferBlockWrapperTCP> ConsumeAsyncTCP(ISourceBlock <BufferBlockWrapperTCP> source) { // Read from the source buffer while (await source.OutputAvailableAsync()) { BufferBlockWrapperTCP wrapper = await source.ReceiveAsync(); TCPMessage msg = wrapper.message; ConsumeMessageTCP(msg, wrapper.netID); } return(null); }
public static void AcceptCallback(IAsyncResult ar) { // Signal the main thread to continue. allDone.Set(); // Get the socket that handles the client request. Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); // Create the state object. StateObject state = new StateObject(); state.workSocket = handler; state.netID = netIDPrefix; netIDPrefix++; clients.Add(state); if (hostID == 0) { hostID = state.netID; } else { // Message Host - New user BufferBlockWrapperTCP wrap = new BufferBlockWrapperTCP(); wrap.message = TCPMessageString("newclient::" + state.netID); wrap.netID = hostID; asyncQueueTCP.SendAsync(wrap); } // Register client Console.WriteLine("[ Player " + state.netID + ": Has Connected ]"); handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); }