Beispiel #1
0
            private void OnReceivedClientData(IAsyncResult async)
            {
                TetriNETTCPCallback stateObject = (TetriNETTCPCallback)async.AsyncState;

                try
                {
                    //DataContractSerializer serializer = new DataContractSerializer();

                    // Complete async receive method and read data length
                    int bytesRead = stateObject.Socket.EndReceive(async);

                    if (stateObject.Socket.Connected)
                    {
                        if (bytesRead > 0)
                        {
                            stateObject.Message.Append(Encoding.ASCII.GetString(stateObject.Buffer, 0, bytesRead)); // TODO: non ascii

                            if (true /*TODO: parse string/buffer and check <EOF>*/)
                            {
                                // All data has been received
                                // TODO: deserialize and call IHost method
                                Console.WriteLine("OnReceivedClientData:[{0}]", stateObject.Message);

                                stateObject.Message.Clear();
                            }

                            stateObject.Socket.BeginReceive(stateObject.Buffer, 0, TetriNETTCPCallback.BufferSize, 0, OnReceivedClientData, stateObject);
                        }
                        else
                        {
                            OnClientDisconnected(stateObject.Socket);
                        }
                    }
                    else
                    {
                        OnClientDisconnected(stateObject.Socket);
                    }
                }
                catch (SocketException ex)
                {
                    Log.Default.WriteLine(LogLevels.Error, "OnReceivedClientData: SocketException: {0}", ex);
                    OnClientDisconnected(stateObject.Socket);
                }
                catch (Exception ex)
                {
                    Log.Default.WriteLine(LogLevels.Error, "OnReceivedClientData: Exception: {0}", ex);
                    OnClientDisconnected(stateObject.Socket);
                }
            }
Beispiel #2
0
            private void OnClientConnected(IAsyncResult async)
            {
                // Get client socket
                Socket socket = _serverSocket.EndAccept(async);

                // Create state/callback object
                TetriNETTCPCallback stateObject = new TetriNETTCPCallback
                {
                    Socket = socket,
                };

                // Add state object to active connections
                _connections.Add(socket, stateObject);

                // Release server socket to keep listening if limit is not reached
                _serverSocket.BeginAccept(OnClientConnected, null);

                // Allow connected client to receive data and designate a callback method
                socket.BeginReceive(stateObject.Buffer, 0, TetriNETTCPCallback.BufferSize, 0, OnReceivedClientData, stateObject);
            }